我有一个文件可以创建如下:
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
)从 中读取 16384 个字节stream
,而不是在我检查的情况下实际的 13293 个压缩字节。
假设我事先既不知道文件压缩部分的大小,也不知道压缩数据后面的字节数,有没有办法使用 GzipStream/DeflateStream
- 所以它只从
stream
- 或者至少弄清楚压缩数据部分的大小是多少,所以我可以
stream.Position -= actuallyRead - compressedSize
手动?