Я совершенно не знаком с java, я решил изучить его, выполнив небольшой проект. Мне нужно сжать некоторую строку с помощью zlib и записать ее в файл. Однако файл оказывается слишком большим по размеру. Вот пример кода:Сжатие Zlib слишком велико в размере
String input = "yasar\0yasar"; // test input. Input will have null character in it.
byte[] compressed = new byte[100]; // hold compressed content
Deflater compresser = new Deflater();
compresser.setInput(input.getBytes());
compresser.finish();
compresser.deflate(compressed);
File test_file = new File(System.getProperty("user.dir"), "test_file");
try {
if (!test_file.exists()) {
test_file.createNewFile();
}
try (FileOutputStream fos = new FileOutputStream(test_file)) {
fos.write(compressed);
}
} catch (IOException e) {
e.printStackTrace();
}
Это запись файла в 1 килобайт, в то время как файл должен быть не более 11 байт (потому что содержание 11 байт здесь.). Я думаю, что проблема в том, что я инициализирую массив байтов, сжатый как 100 байт, но я не знаю, насколько велики будут данные, предоставленные вместе. Что я здесь делаю неправильно? Как я могу это исправить?
использовать 'resultLength' как [документации] (http://docs.oracle.com/javase/7/docs/api/java/util/zip/Deflater.html) делает. – zapl
@zapl Это дает длину сжатых данных после завершения сжатия. Мне нужно инициализировать выходной массив до инициализации, иначе я получаю сообщение об ошибке: 'переменная сжата, возможно, не была инициализирована' – yasar
@HighPerformanceMark Я не уверен, как проверить. Я нахожусь на окнах 7 (64 бит) – yasar