Fixed bundle reading for Unity 5.3+ bundles with LZMA

This commit is contained in:
Perfare 2016-09-14 18:49:13 +08:00
parent f7948e58b4
commit 88d78e5166
2 changed files with 19 additions and 1 deletions

View File

@ -122,5 +122,23 @@ namespace SevenZip.Compression.LZMA
return newOutStream;
}
public static MemoryStream StreamDecompress(MemoryStream newInStream, long outSize)
{
SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
newInStream.Seek(0, 0);
MemoryStream newOutStream = new MemoryStream();
byte[] properties2 = new byte[5];
if (newInStream.Read(properties2, 0, 5) != 5)
throw (new Exception("input .lzma is too short"));
decoder.SetDecoderProperties(properties2);
long compressedSize = newInStream.Length - newInStream.Position;
decoder.Code(newInStream, newOutStream, compressedSize, outSize, null);
newOutStream.Position = 0;
return newOutStream;
}
}
}

View File

@ -173,7 +173,7 @@ namespace Unity_Studio
var uncompressedBytes = new byte[uncompressedSize];
using (var mstream = new MemoryStream(compressedBytes))
{
var decoder = SevenZip.Compression.LZMA.SevenZipHelper.StreamDecompress(mstream);
var decoder = SevenZip.Compression.LZMA.SevenZipHelper.StreamDecompress(mstream, uncompressedSize);
decoder.Read(uncompressedBytes, 0, uncompressedSize);
decoder.Dispose();
}