【发布时间】:2021-11-29 11:07:13
【问题描述】:
以下是我使用DeflateStream写的一个简单的压缩方法:
public static int Compress(
byte[] inputData,
int inputStartIndex,
int inputLength,
byte[] outputData,
int outputStartIndex,
int outputLength)
{
if (inputData == null)
throw new ArgumentNullException("inputData must be non-null");
MemoryStream memStream = new MemoryStream(outputData, outputStartIndex, outputLength);
using (DeflateStream dstream = new DeflateStream(memStream, CompressionLevel.Optimal))
{
dstream.Write(inputData, inputStartIndex, inputLength);
return (int)(memStream.Position - outputStartIndex);
}
}
这个方法的特别之处在于我没有使用MemoryStream的无参数构造函数。这是因为它是一个高吞吐量的服务器。数组outputData是从ArrayPool租来的,用来存放压缩后的字节,使用后可以返回给ArrayPool。
压缩发生正确,压缩数据正确放入outputData,但memStream.Position为零,所以我无法找出MemoryStream写入了多少字节。
只有outputData 的一部分被压缩数据占用。如何知道压缩数据的长度?
【问题讨论】:
标签: c# memorystream deflatestream