【发布时间】:2018-07-01 10:27:57
【问题描述】:
想压缩和解压缩MemoryStream 但似乎CopyTo 不像预期的那样工作?为什么?如何解决这个问题?
public static MemoryStream Compress(MemoryStream originalStream)
{
Console.WriteLine("Original before compressing size: {0}", originalStream.Length.ToString());
MemoryStream compressedMemoryStream = new MemoryStream();
using (DeflateStream deflateStream = new DeflateStream(compressedMemoryStream, CompressionMode.Compress, true))
{
originalStream.CopyTo(deflateStream);
}
Console.WriteLine("Compressed size: {0}", compressedMemoryStream.Length.ToString());
return compressedMemoryStream;
}
public static void Decompress(MemoryStream compressedStream)
{
Console.WriteLine("Compressed before decompressing size: {0}", compressedStream.Length.ToString());
using (MemoryStream decompressedFileStream = new MemoryStream())
{
using (DeflateStream decompressionStream = new DeflateStream(compressedStream, CompressionMode.Decompress, true))
{
decompressionStream.CopyTo(decompressedFileStream);
}
Console.WriteLine("Decompressed size: {0}", decompressedFileStream.Length.ToString());
}
}
输出:
Original before compressing size: 5184054
Compressed size: 0
Compressed before decompressing size: 0
Decompressed size: 0
【问题讨论】:
-
在开始复制之前,请确保您的 originalStream 位于
Position = 0。否则它将找不到任何要复制的内容,位于流的末尾(因为您之前向其写入了数据?)。 -
@RayKoopa,是的,你是对的!发布答案我会接受它!
-
@A191919 记得把新的
MemoryStream compressedMemoryStream移到最后的Position = 0
标签: c# memorystream deflate