次のようなファイルを作成できます。
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...
私がチェックした場合、実際の13293バイトの圧縮されたバイトではなく、GZipStream
( についても同じですDeflateStream
)が から16384バイトを読み取ることがわかりました。stream
ファイルの圧縮部分のサイズも、圧縮データに続くバイト数も事前にわからないと仮定すると、GzipStream/DeflateStream を使用する方法はありますか
- そのため、圧縮されたデータのみを読み取ります
stream
- または、少なくとも圧縮データ部分のサイズを把握して、
stream.Position -= actuallyRead - compressedSize
手動でできますか?