Я пытаюсь написать инструмент сжатия zipstream, например получать данные из стороннего сервиса, преобразовывать их, сжимать, а затем добавлять эти байты в поток байтов zip-архива и отправлять в другой сервис.
Crc32 пересчитывается после каждого фрагмента.
Сделана эмуляция стороннего сервиса - чтение файла по частям.
Эта версия работает, но после извлечения я получаю пустой файл. Но он не пустой — я вижу данные в шестнадцатеричном редакторе. Я думаю, что-то есть с crc32.
Но если я сжимаю весь файл сразу, все работает нормально.
Вот мой вопрос.
Это так? можно ли сжимать большие объемы данных по частям с помощью deflatestream?
Мне нужно будет извлечь эти данные позже с помощью обычных инструментов zip.
public async Task Compress(string fileName, IAsyncEnumerable data)
{
var crc32Helper = new System.IO.Hashing.Crc32();
var lfh = ZipTools.GetLocalFileHeaderEntry(fileName);
testResult.AddRange(lfh);
var bytearray = new List();
await foreach (var chunk in data)
{
_originalSize += (ulong) chunk.Length;
var compressedData = Compress(chunk);
_compressedSize += (ulong) compressedData.Length;
crc32Helper.Append(chunk);
testResult.AddRange(compressedData);
}
_originalSize += (ulong) bytearray.Count;
_crc32 = crc32Helper.GetCurrentHashAsUInt32();
var cd = ZipTools.GetCentralDirectoryEntry(
fileName,
_crc32,
(ulong) lfh.Length + _compressedSize,
_compressedSize,
_originalSize);
testResult.AddRange(cd);
return testResult.ToArray();
}
public byte[] Compress(byte[] data)
{
using var input = new MemoryStream(data);
using var resultStream = new MemoryStream();
using (DeflateStream compressionStream = new DeflateStream(resultStream, CompressionMode.Compress))
{
input.CopyTo(compressionStream);
}
return resultStream.ToArray();
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... latestream
Сжатие больших файлов с использованием DeflateStream ⇐ C#
Место общения программистов C#
-
Anonymous
1711852385
Anonymous
Я пытаюсь написать инструмент сжатия zipstream, например получать данные из стороннего сервиса, преобразовывать их, сжимать, а затем добавлять эти байты в поток байтов zip-архива и отправлять в другой сервис.
Crc32 пересчитывается после каждого фрагмента.
Сделана эмуляция стороннего сервиса - чтение файла по частям.
Эта версия работает, но после извлечения я получаю пустой файл. Но он не пустой — я вижу данные в шестнадцатеричном редакторе. Я думаю, что-то есть с crc32.
Но если я сжимаю весь файл сразу, все работает нормально.
Вот мой вопрос.
Это так? можно ли сжимать большие объемы данных по частям с помощью deflatestream?
Мне нужно будет извлечь эти данные позже с помощью обычных инструментов zip.
public async Task Compress(string fileName, IAsyncEnumerable data)
{
var crc32Helper = new System.IO.Hashing.Crc32();
var lfh = ZipTools.GetLocalFileHeaderEntry(fileName);
testResult.AddRange(lfh);
var bytearray = new List();
await foreach (var chunk in data)
{
_originalSize += (ulong) chunk.Length;
var compressedData = Compress(chunk);
_compressedSize += (ulong) compressedData.Length;
crc32Helper.Append(chunk);
testResult.AddRange(compressedData);
}
_originalSize += (ulong) bytearray.Count;
_crc32 = crc32Helper.GetCurrentHashAsUInt32();
var cd = ZipTools.GetCentralDirectoryEntry(
fileName,
_crc32,
(ulong) lfh.Length + _compressedSize,
_compressedSize,
_originalSize);
testResult.AddRange(cd);
return testResult.ToArray();
}
public byte[] Compress(byte[] data)
{
using var input = new MemoryStream(data);
using var resultStream = new MemoryStream();
using (DeflateStream compressionStream = new DeflateStream(resultStream, CompressionMode.Compress))
{
input.CopyTo(compressionStream);
}
return resultStream.ToArray();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78244376/big-file-compression-using-deflatestream[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия