From c8a5a5009ecc6d54578315db3098e2b890776ecb Mon Sep 17 00:00:00 2001 From: VaDiM Date: Mon, 5 Jan 2026 18:16:13 +0300 Subject: [PATCH] Use span for stringBuffer in SerializedFile --- AssetStudio/SerializedFile.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/AssetStudio/SerializedFile.cs b/AssetStudio/SerializedFile.cs index 0b19732..4b05291 100644 --- a/AssetStudio/SerializedFile.cs +++ b/AssetStudio/SerializedFile.cs @@ -349,23 +349,19 @@ namespace AssetStudio } m_Type.m_StringBuffer = reader.ReadBytes(stringBufferSize); - using (var stringBufferReader = new BinaryReader(new MemoryStream(m_Type.m_StringBuffer))) + var stringBufferSpan = new ReadOnlySpan(m_Type.m_StringBuffer); + foreach (var m_Node in m_Type.m_Nodes) { - for (var i = 0; i < numberOfNodes; i++) - { - var m_Node = m_Type.m_Nodes[i]; - m_Node.m_Type = ReadString(stringBufferReader, m_Node.m_TypeStrOffset); - m_Node.m_Name = ReadString(stringBufferReader, m_Node.m_NameStrOffset); - } + m_Node.m_Type = ReadString(stringBufferSpan, m_Node.m_TypeStrOffset); + m_Node.m_Name = ReadString(stringBufferSpan, m_Node.m_NameStrOffset); } - string ReadString(BinaryReader stringBufferReader, uint value) + string ReadString(ReadOnlySpan stringBuff, uint value) { var isOffset = (value & 0x80000000) == 0; if (isOffset) { - stringBufferReader.BaseStream.Position = value; - return stringBufferReader.ReadStringToNull(); + return stringBuff.Slice((int)value).ReadStringToNull(); } var offset = value & 0x7FFFFFFF; if (CommonString.StringBuffer.TryGetValue(offset, out var str))