Если вы просто сжимаете и распаковываете байтовые массивы - без сохранения их в 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, независимо от фактической длины данных, которые он хранит.