当前位置: 首页 > 知识库问答 >
问题:

Java通货紧缩/通货膨胀流是如何工作的?

云宾鸿
2023-03-14

测试数据:D8A8E00821608F227AE473774E177216

压缩数据:789C

解压缩数据:

我的程序:

SecureRandom random = new SecureRandom();
byte[] testdata = new byte[16];
random.nextBytes(testdata);
System.out.println("Test data: " + DatatypeConverter.printHexBinary(testdata));

byte[] compressed = null;
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())
{
   try (DeflaterOutputStream stream = new DeflaterOutputStream(buffer))
   {
      stream.write(testdata);
      stream.flush();
      compressed = buffer.toByteArray();
      System.out.println("Compressed data: " + DatatypeConverter.printHexBinary(compressed));
   }
}
catch (IOException e)
{
   System.out.println("IOException during compression.");
}

byte[] decompressed = null;
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())
{
   try (InflaterOutputStream stream = new InflaterOutputStream(buffer))
   {
      stream.write(compressed);
      stream.flush();
      decompressed = buffer.toByteArray();
      System.out.println("Decompressed data: " + DatatypeConverter.printHexBinary(decompressed));
   }
}
catch (IOException e)
{
   System.out.println("IOException during decompression.");
}

共有1个答案

汤飞翮
2023-03-14

问题是,您只是在刷新流--这并不一定意味着没有更多的数据来,这可能会影响解压缩。

如果将flush()调用都更改为close(),您将看到您返回了适当的数据...或者在使用try-with-resources语句时,只需让它关闭内部流,然后调用TobyteArray:

try (ByteArrayOutputStream buffer = new ByteArrayOutputStream())
{
   try (DeflaterOutputStream stream = new DeflaterOutputStream(buffer))
   {
      stream.write(testdata);
   }
   compressed = buffer.toByteArray();
   System.out.println("Compressed data: " + Arrays.toString(compressed));
}
catch (IOException e)
{
   System.out.println("IOException during compression.");
}

(减压时同上。)

 类似资料:
  • 有很多链接和开放的Q 第一件事第一 问题: java.lang.OutOfMemoryError:元空间 jvm: 框架: Spring, 冬眠, 检票口, 码头 嫌疑人1: 在使用期间,元空间逐渐增长,以下反射类按比例加载到元空间中[由jmap-histo cron jobs观察到] 可能的解决方案: a、 由于我们正在使用大量处理反射内容的库,我们认为128m不足以容纳元空间中所有生成的XX类

  • 下面是我尝试过的所有方法的列表,这些方法都失败了: file_get_contents():不能将输入类型的流表示为文件描述符 “” https://arjunphp.com/how-to-unpack-a-zip-file-using-php/ 我开始认为用PHP内置的zip功能来操作流是不可能的。编写临时文件的开销和复杂性将非常令人失望。有人知道怎么做到这一点吗,还是一个bug?

  • 问题内容: 是否存在用于隐藏在Internet上的ByteBuffer的gzip压缩库?是什么让我们可以推送原始数据然后提取缩小的数据?我们已经搜索了它,但是仅找到处理InputStreams和OutputStreams的库。 我们的任务是创建gzip过滤器,以缩小管道体系结构中的ByteBuffers流。这是拉式体系结构,其中最后一个元素从较早的元素中提取数据。我们的gzip过滤器处理ByteB

  • 这是一篇加密货币的入门文章,是写给没有接触过比特币、加密货币的小伙伴的入门指南,接下来的内容,都将与加密货币相关。 前言 “加密货币就是货币”听起来挺“白痴的”。想想背后的意思,言外之意就是“加密货币可能不是货币”,就非常值得玩味了。事实上,在我接触的很多朋友当中,一开始认为后者的更多。包括我自己,也是经过探究一段时间之后,才认定这个结论的。 惯性定律不仅存在于物质世界,也存在于人类的认知世界。人

  • 我想创建一个应用程序,其中NavigationView和Bottom Navigation可以互相工作,但在输出中,我在“Run”中得到了下一个字符串。 .

  • 我曾经能够做到这一点,但我正在努力应对0.3的期货。 下面是我从WebSocket获得的一个sink和stream: 我创建了一个在异步tokio任务之间通信的无界通道: 这是我被卡住的部分。我生成了一个异步任务,它应该连接无界接收器和接收器;我的想法是通过< code>unbounded_sender发送消息: 对于<code>send_all</code>,错误消息显示: 而且 而且 查看文档