0

我正在使用下面的代码使用 SevenZip 压缩流,它会产生一个输出,我将其写回文件系统。

private static byte[] Compress(byte[] input)
{
    var inputStream = new MemoryStream(input);
    var outputStream = new MemoryStream();

    Int32 dictionarySize = 1 << 16;
    string matchFinder = "bt4";
    Int32 numFastBytes = 128;

    CoderPropID[] propIDs =
    {
        CoderPropID.DictionarySize
        ,CoderPropID.MatchFinder
        ,CoderPropID.NumFastBytes
    };

    object[] properties =
    {
        (Int32)(dictionarySize)
        ,matchFinder
        ,(Int32)(numFastBytes)
    };

    SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder();
    encoder.SetCoderProperties(propIDs, properties);
    encoder.WriteCoderProperties(outputStream);
    outputStream.Write(BitConverter.GetBytes(inputStream.Length), 0, 8);
    encoder.Code(inputStream, outputStream, inputStream.Length, -1, null);
    outputStream.Flush();
    outputStream.Close();

    return outputStream.ToArray();
}

但是当我尝试解压缩输出文件时,使用下面的代码会引发错误

System.OverflowException: '数组尺寸超出了支持的范围。

在线coder.SetDecoderProperties(properties);

private static void DecompressFileLZMA(string inFile, string outFile)
{
    SevenZip.Compression.LZMA.Decoder coder = new SevenZip.Compression.LZMA.Decoder();
    FileStream input = new FileStream(inFile, FileMode.Open);
    FileStream output = new FileStream(outFile, FileMode.Create);

    // Read the decoder properties
    byte[] properties = new byte[5];
    input.Read(properties, 0, 5);

    // Read in the decompress file size.
    byte[] fileLengthBytes = new byte[8];
    input.Read(fileLengthBytes, 0, 8);
    long fileLength = BitConverter.ToInt64(fileLengthBytes, 0);

    coder.SetDecoderProperties(properties);
    coder.Code(input, output, input.Length, fileLength, null);
    output.Flush();
    output.Close();
}

我无法找出不正确的地方SetDecoderProperties

4

0 回答 0