轮胎压缩和减压 MemoryStream 但看起来 CopyTo 不按预期工作吗?为什么?怎么解决这个问题?
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
CopyTo 开始从 当前位置 源流的。
因为你发布的压缩流大小是0,我很确定 originalStream 位于流的末尾,因此没有复制/压缩字节。
originalStream
确保位置 0 所以它可以找到任何要复制和压缩到流中的数据。
0
正如@xanatos提到的,这同样适用于 Decompress ,因此请确保 compressedStream 在对其进行解压缩之前也将其定位为0。
Decompress
compressedStream