LZMA.cs 891 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.IO;
  2. using SevenZip.Compression.LZMA;
  3. namespace MeidoPhotoStudio.Converter.Utility;
  4. internal static class LZMA
  5. {
  6. public static MemoryStream Decompress(Stream inStream)
  7. {
  8. var outStream = new MemoryStream();
  9. var properties = new byte[5];
  10. if (inStream.Read(properties, 0, 5) is not 5)
  11. throw new("input .lzma is too short");
  12. var decoder = new Decoder();
  13. decoder.SetDecoderProperties(properties);
  14. var outSize = 0L;
  15. for (var i = 0; i < 8; i++)
  16. {
  17. var v = inStream.ReadByte();
  18. if (v < 0)
  19. throw new("Can't Read 1");
  20. outSize |= ((long)(byte)v) << (8 * i);
  21. }
  22. var compressedSize = inStream.Length - inStream.Position;
  23. decoder.Code(inStream, outStream, compressedSize, outSize, null);
  24. return outStream;
  25. }
  26. }