Java: есть ли способ получить ожидаемую несжатую длину сжатого байтового массива? - PullRequest
1 голос
/ 31 мая 2011

Я использую java.util.zip для сжатия и распаковки байтовых массивов, используя Inflater и Deflater.

Содержит ли сжатый результат информацию об ожидаемой длине исходных данных или я должен хранить ее сам?

Я хотел бы знать ожидаемую длину несжатой информации без распаковки всех данных.

1 Ответ

0 голосов
/ 31 мая 2011

Если вы просто сжимаете и распаковываете байтовые массивы - без сохранения их в ZipEntry - вы должны сами сохранить размер, так как байтовый массив, к которому вы сжимаете данные, не обязательно используется в полной мере.

Это хорошо видно из примера в Deflater javadoc :

try {
     // Encode a String into bytes
     String inputString = "blahblahblah??";
     byte[] input = inputString.getBytes("UTF-8");

     // Compress the bytes
     byte[] output = new byte[100];
     Deflater compresser = new Deflater();
     compresser.setInput(input);
     compresser.finish();
     int compressedDataLength = compresser.deflate(output);

     // Decompress the bytes
     Inflater decompresser = new Inflater();
     decompresser.setInput(output, 0, compressedDataLength);
     byte[] result = new byte[100];
     int resultLength = decompresser.inflate(result);
     decompresser.end();

     // Decode the bytes into a String
     String outputString = new String(result, 0, resultLength, "UTF-8");
 } catch(java.io.UnsupportedEncodingException ex) {
     // handle
 } catch (java.util.zip.DataFormatException ex) {
     // handle
 }

Код должен поддерживать длину сжатых данных, поскольку выходной массив имеет длину 100, независимо от фактической длины данных, которые он хранит.

...