Запись tar файла неизвестного (большого) размера в Java

Я хотел бы написать большой поток неизвестного размера в tar файл на Java. Я знаю, что у Apache есть библиотека commons compress, которая обрабатывает файлы tar, но они требуют, чтобы я знал размер заранее. Рассмотрим Apache собственный example:

TarArchiveEntry entry = new TarArchiveEntry(name);
entry.setSize(size);
tarOutput.putArchiveEntry(entry);
tarOutput.write(contentOfEntry);
tarOutput.closeArchiveEntry();

Я буду знать размер записи после того, как напишу ее, но не раньше. Не существует способа, которым я могу написать контент, и когда я закончу размер, затем записывается в заголовок?

Ответ 1

В итоге я принял jtar и изменил его, поэтому вам не нужно указывать размер до тех пор, пока вы не напишете. Кажется, нет пакета, который делает это изначально... Я настроил issue, который запрашивает это изменение. К сожалению, для этого потребовалось много уродливого кода и создания моего собственного RandomAccessFileInputStream(), который непригоден для загрузки патча.

Ответ 2

Если у вас есть только один текстовый файл, который можно добавить, вы можете использовать метод setSize (long) и установить размер записи.

где данные - это строка, которую вы хотите загрузить.

long size=data.getByte().length;
TarArchiveEntry entry = new TarArchiveEntry("sample.txt");
entry.setSize(size);
tarOutput.putArchiveEntry(entry);
tarOutput.write(contentOfEntry);
tarOutput.closeArchiveEntry();