Мне нужна помощь с сжатием zlib большого файла. Моя проблема в том, что я не могу сжать файл чанком до того же уровня, что я сжимаю его одним go. Результат сжатия, когда я делаю это кусками, немного больше. Однако мне нужно сжать файлы до того же размера, что и в одном go. Я закодировал свою заявку в C#. Я был бы признателен, если бы вы могли взглянуть и дать мне ваш совет.
Примечание. Я использовал библиотеки DotNetZip и SharpZipLib и обнаружил, что результаты сжатия этих двух библиотек также различны.
int len = 1 <<16;
int partSize = 5 <<16;
MemoryStream ms = new MemoryStream();
//ZlibStream streamCompressed = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.Default);
DeflaterOutputStream streamCompressed = new DeflaterOutputStream(ms, new Deflater( Deflater.DEFAULT_COMPRESSION, false ),len);
try
{
using var sourceFile = new BinaryReader(File.OpenRead(FilePath));
while ((bytesToRead = sourceFile.Read(chunk, 0, len)) > 0)
{
streamCompressed.Write(chunk, 0, bytesToRead);
compData = ms.ToArray();
ms.Position = 0;
ms.SetLength(0);
data = AddArrayToArray(data, compData);
if (data.Length >= partSize)
{
//UPLOAD DATA
}
}
ms = new MemoryStream();
streamCompressed.Flush();
compData = ms.ToArray();
data = AddArrayToArray(data, compData);
//UPLOAD THE LAST PART OF DATA
}