Сжатие массива байтов Java

Для меня getattr проще всего объяснить следующим образом:

Позволяет вам вызывать методы на основе содержимого строки вместо ввода имени метода.

Например , вы не можете этого сделать:

obj = MyObject()
for x in ['foo', 'bar']:
    obj.x()

, поскольку x не относится к типу «builtin», а «str». Однако вы можете это сделать:

obj = MyObject()
for x in ['foo', 'bar']:
    getattr(obj, x)()

Он позволяет динамически подключаться к объектам на основе вашего ввода. Я нашел это полезным при работе с пользовательскими объектами и модулями.

1
задан Karol Dowbecki 13 July 2018 в 20:34
поделиться

2 ответа

Это будет зависеть от данных, которые вы сжимаете. Например, если взять массив из 0 байтов, он сжимается хорошо:

byte[] plain = new byte[10000];
byte[] compressed = compress(plain);
System.out.println(compressed.length); // 33
byte[] result = decompress(compressed);
System.out.println(result.length); // 10000
2
ответ дан Karol Dowbecki 17 August 2018 в 12:10
поделиться
  • 1
    И я полностью не учитывал это, учитывая, что я тестировал его на случайных данных. Теперь имеет смысл. – Lev Knoblock 13 July 2018 в 20:28
  • 2
    @LevKnoblock имеет смысл, если данные были действительно случайными, было бы сложно сжать. Однако вы хотите использовать try-with-resource в своей реализации, чтобы закрыть ресурсы. – Karol Dowbecki 13 July 2018 в 20:31

Сжатие всегда имеет накладные расходы, чтобы обеспечить будущую декомпрессию. Если сжатие не привело к уменьшению длины (данные были уникальными или почти уникальными), тогда выходной файл может быть длиннее входного файла

2
ответ дан Walter Marvin 17 August 2018 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: