Tôi đang cố gắng nén một lượng lớn dữ liệu, đôi khi trong vùng 100GB, khi tôi chạy thường trình tôi đã viết, nó xuất hiện tệp có kích thước chính xác như kích thước trước đó. Có ai khác có vấn đề này với GZipStream không?GZipStream trên dữ liệu lớn
Mã của tôi là như sau:
byte[] buffer = BitConverter.GetBytes(StreamSize);
FileStream LocalUnCompressedFS = File.OpenWrite(ldiFileName);
LocalUnCompressedFS.Write(buffer, 0, buffer.Length);
GZipStream LocalFS = new GZipStream(LocalUnCompressedFS, CompressionMode.Compress);
buffer = new byte[WriteBlock];
UInt64 WrittenBytes = 0;
while (WrittenBytes + WriteBlock < StreamSize)
{
fromStream.Read(buffer, 0, (int)WriteBlock);
LocalFS.Write(buffer, 0, (int)WriteBlock);
WrittenBytes += WriteBlock;
OnLDIFileProgress(WrittenBytes, StreamSize);
if (Cancel)
break;
}
if (!Cancel)
{
double bytesleft = StreamSize - WrittenBytes;
fromStream.Read(buffer, 0, (int)bytesleft);
LocalFS.Write(buffer, 0, (int)bytesleft);
WrittenBytes += (uint)bytesleft;
OnLDIFileProgress(WrittenBytes, StreamSize);
}
LocalFS.Close();
fromStream.Close();
Các StreamSize là một giá trị UInt64 8 byte chứa kích thước của tập tin. tôi viết những 8 byte nguyên để bắt đầu của tập tin vì vậy tôi biết kích thước tập tin ban đầu. Writeblock có giá trị là 32kb (32768 byte). fromStream là luồng để lấy dữ liệu từ, trong trường hợp này, một FileStream. Là 8 byte infront của dữ liệu nén sẽ gây ra một vấn đề?
Liệu việc mã của bạn trên các tập tin nhỏ hơn? –
Bạn có thể xác nhận mã của bạn một cách chính xác nén các tập dữ liệu nhỏ hơn - một tệp văn bản ví dụ bạn biết thường nén tốt hay không ... – Nik