| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using System;
- using System.IO;
- using SevenZip.Compression.LZMA;
- namespace UnityFS
- {
- public static class ComparessHelper
- {
- public static MemoryStream Decompress7Zip(MemoryStream inStream)
- {
- var decoder = new Decoder();
- inStream.Seek(0, SeekOrigin.Begin);
- var newOutStream = new MemoryStream();
- var properties = new byte[5];
- if (inStream.Read(properties, 0, 5) != 5)
- throw new Exception("input .lzma is too short");
- long outSize = 0;
- for (var i = 0; i < 8; i++)
- {
- var v = inStream.ReadByte();
- if (v < 0)
- throw new Exception("Can't Read 1");
- outSize |= ((long)(byte)v) << (8 * i);
- }
- decoder.SetDecoderProperties(properties);
- var compressedSize = inStream.Length - inStream.Position;
- decoder.Code(inStream, newOutStream, compressedSize, outSize, null);
- newOutStream.Position = 0;
- return newOutStream;
- }
- public static void Decompress7Zip(Stream compressedStream, Stream decompressedStream, long compressedSize, long decompressedSize)
- {
- var basePosition = compressedStream.Position;
- var decoder = new Decoder();
- var properties = new byte[5];
- if (compressedStream.Read(properties, 0, 5) != 5)
- throw new Exception("input .lzma is too short");
- decoder.SetDecoderProperties(properties);
- decoder.Code(compressedStream, decompressedStream, compressedSize - 5, decompressedSize, null);
- compressedStream.Position = basePosition + compressedSize;
- }
- }
- }
|