Я использую LibLZMA (он же xz-utils) для распаковки двоичного файла, созданного библиотекой сжатия apache-commons.
Я убедился, что программа Java выводит двоичный файл XZ, и попробовал распаковать его с помощью 7zip в котором указано, что его формат — lzma2:23 crc64
Это функция распаковки:
void decompress_content(const uint8_t *compressed_data, int compressed_length)
{
lzma_stream strm = LZMA_STREAM_INIT;
lzma_ret ret = lzma_stream_decoder(&strm, UINT32_MAX, LZMA_CONCATENATED);
if (ret != LZMA_OK)
throw std::runtime_error("Failed to initialize XZ decoder.");
std::vector decompressed_data;
uint8_t outbuf[65536];
strm.next_in = compressed_data;
strm.avail_in = compressed_length;
strm.next_out = outbuf;
strm.avail_out = sizeof(outbuf);
try
{
while (true)
{
ret = lzma_code(&strm, LZMA_RUN);
// Check if output data was produced
if (strm.avail_out < sizeof(outbuf))
{
size_t write_size = sizeof(outbuf) - strm.avail_out;
decompressed_data.insert(decompressed_data.end(), outbuf, outbuf + write_size);
strm.next_out = outbuf;
strm.avail_out = sizeof(outbuf);
}
if (ret == LZMA_STREAM_END)
{
break;
}
if (ret == LZMA_OK)
{
continue;
}
if (ret == LZMA_BUF_ERROR && strm.avail_in == 0)
{
// No more input data, and decoder cannot make progress
lzma_end(&strm);
throw std::runtime_error("Compressed data is truncated or corrupted.");
}
// Other errors
lzma_end(&strm);
handle_lzma_error(ret);
}
}
catch (...)
{
lzma_end(&strm);
throw;
}
lzma_end(&strm);
parse_entries(decompressed_data);
}
При его выполнении возникла такая ошибка: Сжатые данные усечены или повреждены., что указывает на LZMA_BUF_ERROR.
Бинарный файл XZ, если необходимо:
unsigned char rawData[80] = {
0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00, 0x00, 0x04, 0xE6, 0xD6, 0xB4, 0x46,
0x02, 0x00, 0x21, 0x01, 0x16, 0x00, 0x00, 0x00, 0x74, 0x2F, 0xE5, 0xA3,
0x01, 0x00, 0x17, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x5F, 0x77, 0x6F, 0x72,
0x6C, 0x64, 0x2E, 0x74, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x04, 0x74,
0x65, 0x73, 0x74, 0x00, 0x78, 0x83, 0x76, 0x08, 0x82, 0x49, 0x3C, 0x9C,
0x00, 0x01, 0x30, 0x18, 0x8E, 0x1B, 0xAC, 0xEC, 0x1F, 0xB6, 0xF3, 0x7D,
0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x59, 0x5A
};
Подробнее здесь: https://stackoverflow.com/questions/792 ... r-xz-utils
LZMA_BUF_ERROR при распаковке массива байтов с помощью LibLZMA (или xz-utils) ⇐ C++
Программы на C++. Форум разработчиков
1733687723
Anonymous
Я использую LibLZMA (он же xz-utils) для распаковки двоичного файла, созданного библиотекой сжатия apache-commons.
Я убедился, что программа Java выводит двоичный файл XZ, и попробовал распаковать его с помощью 7zip в котором указано, что его формат — lzma2:23 crc64
Это функция распаковки:
void decompress_content(const uint8_t *compressed_data, int compressed_length)
{
lzma_stream strm = LZMA_STREAM_INIT;
lzma_ret ret = lzma_stream_decoder(&strm, UINT32_MAX, LZMA_CONCATENATED);
if (ret != LZMA_OK)
throw std::runtime_error("Failed to initialize XZ decoder.");
std::vector decompressed_data;
uint8_t outbuf[65536];
strm.next_in = compressed_data;
strm.avail_in = compressed_length;
strm.next_out = outbuf;
strm.avail_out = sizeof(outbuf);
try
{
while (true)
{
ret = lzma_code(&strm, LZMA_RUN);
// Check if output data was produced
if (strm.avail_out < sizeof(outbuf))
{
size_t write_size = sizeof(outbuf) - strm.avail_out;
decompressed_data.insert(decompressed_data.end(), outbuf, outbuf + write_size);
strm.next_out = outbuf;
strm.avail_out = sizeof(outbuf);
}
if (ret == LZMA_STREAM_END)
{
break;
}
if (ret == LZMA_OK)
{
continue;
}
if (ret == LZMA_BUF_ERROR && strm.avail_in == 0)
{
// No more input data, and decoder cannot make progress
lzma_end(&strm);
throw std::runtime_error("Compressed data is truncated or corrupted.");
}
// Other errors
lzma_end(&strm);
handle_lzma_error(ret);
}
}
catch (...)
{
lzma_end(&strm);
throw;
}
lzma_end(&strm);
parse_entries(decompressed_data);
}
При его выполнении возникла такая ошибка: Сжатые данные усечены или повреждены., что указывает на LZMA_BUF_ERROR.
Бинарный файл XZ, если необходимо:
unsigned char rawData[80] = {
0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00, 0x00, 0x04, 0xE6, 0xD6, 0xB4, 0x46,
0x02, 0x00, 0x21, 0x01, 0x16, 0x00, 0x00, 0x00, 0x74, 0x2F, 0xE5, 0xA3,
0x01, 0x00, 0x17, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x5F, 0x77, 0x6F, 0x72,
0x6C, 0x64, 0x2E, 0x74, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x04, 0x74,
0x65, 0x73, 0x74, 0x00, 0x78, 0x83, 0x76, 0x08, 0x82, 0x49, 0x3C, 0x9C,
0x00, 0x01, 0x30, 0x18, 0x8E, 0x1B, 0xAC, 0xEC, 0x1F, 0xB6, 0xF3, 0x7D,
0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x59, 0x5A
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79255324/lzma-buf-error-while-decompressing-byte-array-using-liblzma-or-xz-utils[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия