void ReadCompressedSegment(BundleSegment segment) { m_input.Position = segment.Offset; int method = segment.Compression & 0x3F; if (1 == method) { m_buffer_len = LzmaDecompressBlock(segment.PackedSize, segment.UnpackedSize); return; } if (null == m_packed || segment.PackedSize > m_packed.Length) { m_packed = new byte[segment.PackedSize]; } int packed_size = m_input.Read(m_packed, 0, (int)segment.PackedSize); var output = PrepareBuffer(segment.UnpackedSize); if (3 == method || 2 == method) { m_buffer_len = Lz4Compressor.DecompressBlock(m_packed, packed_size, output, (int)segment.UnpackedSize); } else { throw new NotImplementedException("Not supported Unity asset bundle compression."); } }
internal string ReadCString() { int length = m_input.Read(m_buffer, 0, 0x104); int end = 0; while (end < length && m_buffer[end] != 0) { m_buffer[end++] ^= 0xFF; } return(Encodings.cp932.GetString(m_buffer, 0, end)); }
void ReadCompressedSegment(BundleSegment segment) { m_input.Position = segment.Offset; if (null == m_packed || segment.PackedSize > m_packed.Length) { m_packed = new byte[segment.PackedSize]; } int packed_size = m_input.Read(m_packed, 0, (int)segment.PackedSize); if (null == m_buffer || segment.UnpackedSize > m_buffer.Length) { m_buffer = new byte[segment.UnpackedSize]; } if (3 == segment.Compression) { m_buffer_len = Lz4Compressor.DecompressBlock(m_packed, packed_size, m_buffer, (int)segment.UnpackedSize); } else { throw new NotImplementedException("Not supported Unity asset bundle compression."); } }