У меня есть файл, который можно было создать примерно так:
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
вручную?