【发布时间】:2015-05-12 17:37:54
【问题描述】:
我有一个文件可以像这样创建:
stream.Write(headerBytes, 0, headerBytes.Count);
using (var gz = new GZipStream(stream, Compress, leaveOpen: true);
{
gz.Write(otherBytes, 0, otherBytes.Count);
}
stream.Write(moreBytes, 0, moreBytes.Count);
现在读取文件时像
stream.Read(headerBytes, 0, headerBytes.Count);
// in reality I make sure that indeed headerBytes.Count get read,
// something the above line omits
using (var gz = new GZipStream(stream, Decompress, leaveOpen: true)
{
do { /* use buffer... */}
while ((bytesRead = gz.Read(buffer, 0, buffer.Length)) != 0);
}
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
// use buffer...
事实证明,GZipStream(DeflateStream 也是如此)从 stream 读取了 16384 个字节,而不是在我检查的情况下实际的 13293 个压缩字节。
假设我事先不知道文件压缩部分的大小,也不知道压缩数据后面的字节数,有没有办法使用 GzipStream/DeflateStream
- 所以它只从
stream读取压缩数据 - 或者至少弄清楚压缩数据部分的大小,这样我就可以手动
stream.Position -= actuallyRead - compressedSize?
【问题讨论】:
标签: .net stream compression gzipstream deflatestream