public MstRecord64 ReadRecord2 ( long offset ) { if (_stream.Seek(offset, SeekOrigin.Begin) != offset) { throw new IOException(); } Encoding encoding = new UTF8Encoding(false, true); MemoryStream memory = new MemoryStream(PreloadLength); _AppendStream(_stream, memory, PreloadLength); memory.Position = 0; MstRecordLeader64 leader = MstRecordLeader64.Read(memory); int amountToRead = (int)(leader.Length - memory.Length); if (amountToRead > 0) { _AppendStream(_stream, memory, amountToRead); } List <MstDictionaryEntry64> dictionary = new List <MstDictionaryEntry64>(); for (int i = 0; i < leader.Nvf; i++) { MstDictionaryEntry64 entry = new MstDictionaryEntry64 { Tag = memory.ReadInt32Network(), Position = memory.ReadInt32Network(), Length = memory.ReadInt32Network() }; dictionary.Add(entry); } foreach (MstDictionaryEntry64 entry in dictionary) { long endOffset = leader.Base + entry.Position; memory.Seek(endOffset, SeekOrigin.Begin); entry.Bytes = memory.ReadBytes(entry.Length); if (entry.Bytes != null) { entry.Text = encoding.GetString(entry.Bytes); } } MstRecord64 result = new MstRecord64 { Leader = leader, Dictionary = dictionary }; return(result); }
public MstRecord64 ReadRecord ( long offset ) { if (_stream.Seek(offset, SeekOrigin.Begin) != offset) { throw new IOException(); } //new ObjectDumper() // .DumpStream(_stream,offset,64) // .WriteLine(); Encoding encoding = new UTF8Encoding(false, true); MstRecordLeader64 leader = MstRecordLeader64.Read(_stream); List <MstDictionaryEntry64> dictionary = new List <MstDictionaryEntry64>(); for (int i = 0; i < leader.Nvf; i++) { MstDictionaryEntry64 entry = new MstDictionaryEntry64 { Tag = _stream.ReadInt32Network(), Position = _stream.ReadInt32Network(), Length = _stream.ReadInt32Network() }; dictionary.Add(entry); } foreach (MstDictionaryEntry64 entry in dictionary) { long endOffset = offset + leader.Base + entry.Position; _stream.Seek(endOffset, SeekOrigin.Begin); entry.Bytes = _stream.ReadBytes(entry.Length); if (entry.Bytes != null) { entry.Text = encoding.GetString(entry.Bytes); } } MstRecord64 result = new MstRecord64 { Leader = leader, Dictionary = dictionary }; return(result); }
public RecordField DecodeField ( [NotNull] MstDictionaryEntry64 entry ) { string catenated = string.Concat ( entry.Tag, "#", entry.Text ); RecordField result = RecordField.Parse(catenated); return(result); }