public LocalSerializedObjectIdentifier Parse(EndianBinaryReader varStream) { localSerializedFileIndex = varStream.ReadInt32(); varStream.AlignStream(); localIdentifierInFile = varStream.ReadInt64(); return(this); }
public ObjectInfo Parse(EndianBinaryReader varStream) { varStream.AlignStream(); LocalPathID = varStream.ReadInt64(); byteStart = varStream.ReadInt64(); //varStream.Seek(4,System.IO.SeekOrigin.Current); byteSize = varStream.ReadUInt32(); typeID = varStream.ReadInt32(); return(this); }
public SerializedFile Parse(EndianBinaryReader varStream) { Header = new SerializedFileHeader().Parse(varStream); varStream.endian = (EndianType)Header.Endianess; UnityVersion = varStream.ReadStringToNull(); var tempBuildTarget = varStream.ReadInt32(); if (Enum.IsDefined(typeof(BuildTarget), tempBuildTarget)) { TargetPlatform = (BuildTarget)tempBuildTarget; } EnableTypeTree = varStream.ReadBoolean(); var tempTypeCount = varStream.ReadInt32(); Types = new List <SerializedType>(tempTypeCount); for (int i = 0; i < tempTypeCount; ++i) { var tempType = new SerializedType().Parse(varStream, EnableTypeTree, Header.Version); Types.Add(tempType); } var tempObjCount = varStream.ReadInt32(); ObjectMap = new Dictionary <long, ObjectInfo>(tempObjCount); for (int i = 0; i < tempObjCount; ++i) { var tempObjInfo = new ObjectInfo().Parse(varStream); ObjectMap.Add(tempObjInfo.LocalPathID, tempObjInfo); } var tempScriptCount = varStream.ReadInt32(); ScriptTypes = new List <LocalSerializedObjectIdentifier>(tempScriptCount); for (int i = 0; i < tempScriptCount; ++i) { var tempScriptTyps = new LocalSerializedObjectIdentifier().Parse(varStream); ScriptTypes.Add(tempScriptTyps); } var tempExternalsCount = varStream.ReadInt32(); FileIdentifiers = new List <FileIdentifier>(tempExternalsCount); for (int i = 0; i < tempExternalsCount; ++i) { var tempFileID = new FileIdentifier().Parse(varStream); FileIdentifiers.Add(tempFileID); } var tempRefTypesCount = varStream.ReadInt32(); RefTypes = new List <SerializedType>(tempRefTypesCount); for (int i = 0; i < tempRefTypesCount; ++i) { var tempType = new SerializedType().Parse(varStream, EnableTypeTree, Header.Version, true); Types.Add(tempType); } userInformation = varStream.ReadStringToNull(); if (varStream.Position < (int)Alignment.kMetadataAllocation) { varStream.Seek((int)Alignment.kMetadataAllocation - varStream.Position, SeekOrigin.Current); } else { varStream.AlignStream((int)Alignment.kSectionAlignment); } return(this); }
private long ReadBlocksInfoAndDirectory(EndianBinaryReader varReader) { byte[] blocksInfoBytes; if (HeaderInfo.version >= 7) { varReader.AlignStream(16); } if ((HeaderInfo.flags & (int)ArchiveFlags.kArchiveBlocksInfoAtTheEnd) != 0) { var tempPosition = varReader.Position; { varReader.Position = varReader.BaseStream.Length - HeaderInfo.compressedBlocksInfoSize; blocksInfoBytes = varReader.ReadBytes((int)HeaderInfo.compressedBlocksInfoSize); } varReader.Position = tempPosition; } else //0x40 kArchiveBlocksAndDirectoryInfoCombined { blocksInfoBytes = varReader.ReadBytes((int)HeaderInfo.compressedBlocksInfoSize); } var blocksInfoCompressedStream = new MemoryStream(blocksInfoBytes); MemoryStream blocksInfoUncompresseddStream; switch (HeaderInfo.GetBlocksInfoCompressionType()) { default: //None { blocksInfoUncompresseddStream = blocksInfoCompressedStream; break; } case Compression.CompressionType.kCompressionLzma: { blocksInfoUncompresseddStream = new MemoryStream((int)(HeaderInfo.uncompressedBlocksInfoSize)); SevenZipHelper.StreamDecompress(blocksInfoCompressedStream, blocksInfoUncompresseddStream, HeaderInfo.compressedBlocksInfoSize, HeaderInfo.uncompressedBlocksInfoSize); blocksInfoUncompresseddStream.Position = 0; blocksInfoCompressedStream.Close(); break; } case Compression.CompressionType.kCompressionLz4: case Compression.CompressionType.kCompressionLz4HC: { var uncompressedBytes = new byte[HeaderInfo.uncompressedBlocksInfoSize]; using (var decoder = new Lz4DecoderStream(blocksInfoCompressedStream)) { decoder.Read(uncompressedBytes, 0, uncompressedBytes.Length); } blocksInfoUncompresseddStream = new MemoryStream(uncompressedBytes); break; } } using (var blocksInfoReader = new EndianBinaryReader(blocksInfoUncompresseddStream)) { var uncompressedDataHash = blocksInfoReader.ReadBytes(16); var blocksInfoCount = blocksInfoReader.ReadInt32(); BlocksInfo = new List <StorageBlock>(blocksInfoCount); for (int i = 0; i < blocksInfoCount; i++) { var tempBlock = new StorageBlock().Parse(blocksInfoReader); BlocksInfo.Add(tempBlock); } var nodesCount = blocksInfoReader.ReadInt32(); DirectoryInfo = new List <Node>(nodesCount); for (int i = 0; i < nodesCount; i++) { var tempDirInfo = new Node().Parse(blocksInfoReader); DirectoryInfo.Add(tempDirInfo); } } return(varReader.Position); }