gpt4 book ai didi

Java GZIPInputStream.read() 函数

转载 作者:行者123 更新时间:2023-12-01 15:30:41 26 4
gpt4 key购买 nike

在下面的行中,当instream是GZIPInputStream时,我发现c的值是完全随机的,要么大于或小于1024。但是当instream是FileInputStream时,返回值始终是1024。

int c;
while ((c = instream.read(buffer, offset, 1024)) != -1)
System.out.println("Bytes read: " + c);

输入源文件大小远大于 1024 字节。为什么GZIPInputStream的返回值不可预测?难道它不应该总是读取到所说的值 1024 吗?谢谢!

最佳答案

这只是压缩的产物。通常,除非解压缩整个 block ,否则无法读取 GZIP 中的压缩 block (大小可变)。

您正在阅读的 block :

0           1024           2048           3072           4096...

但是如果压缩 block 的边界看起来像这样:

0       892     1201        2104         2924 ...

您将首先读取 892 字节,然后是 309 (1201-892),然后是 903 (2104-1201),等等。这有点过于简单化,但也不算太多。

正如 Miserable Variable 上面评论的那样,读取返回的值永远不应该超过 1024,否则意味着缓冲区溢出。

关于Java GZIPInputStream.read() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com