@Override
    public void decompress(@NotNull ByteBuffer bufferWithCompressedData,
                           byte[] bufferForDecompression) throws IOException {
      int contentSize = bufferWithCompressedData.remaining();
      Inflater inflater = new Inflater();
      try {
        inflater.setInput(bufferWithCompressedData);
        int bytesInflated = inflater.inflate(bufferForDecompression);
        if (bytesInflated != bufferForDecompression.length) {
          throw new IOException("Decompressed bytes[" + bytesInflated + "b out of " + contentSize + "b] " +
                                "!= compressed bytes[" + bufferForDecompression.length + "] " +
                                "=> storage is likely corrupted"
          );
        }
        if (!inflater.finished()) {
          throw new IOException("Decompressed bytes[" + bytesInflated + "b out of " + contentSize + "b] " +
                                "but compressed stream is not finished yet " +
                                "=> storage is likely corrupted"
          );
        }
      }
      catch (DataFormatException e) {
        throw new IOException("Decompression [" + contentSize + "b] was failed => storage is likely corrupted", e);
      }
      finally {
        inflater.end();
      }
    }
@Override
    public void decompress(@NotNull ByteBuffer bufferWithCompressedData,
                           byte[] bufferForDecompression)