Для меня getattr проще всего объяснить следующим образом:
Позволяет вам вызывать методы на основе содержимого строки вместо ввода имени метода.
Например , вы не можете этого сделать:
obj = MyObject()
for x in ['foo', 'bar']:
obj.x()
, поскольку x не относится к типу «builtin», а «str». Однако вы можете это сделать:
obj = MyObject()
for x in ['foo', 'bar']:
getattr(obj, x)()
Он позволяет динамически подключаться к объектам на основе вашего ввода. Я нашел это полезным при работе с пользовательскими объектами и модулями.
Это будет зависеть от данных, которые вы сжимаете. Например, если взять массив из 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
Сжатие всегда имеет накладные расходы, чтобы обеспечить будущую декомпрессию. Если сжатие не привело к уменьшению длины (данные были уникальными или почти уникальными), тогда выходной файл может быть длиннее входного файла
try-with-resource
в своей реализации, чтобы закрыть ресурсы. – Karol Dowbecki 13 July 2018 в 20:31