gpt4 book ai didi

java - 使用 Deflater 和 Inflater 的字节数组长度

转载 作者:行者123 更新时间:2023-12-02 15:37:07 25 4
gpt4 key购买 nike

我们如何理解字节数组的定义长度?

例如,在本例中,我们定义字节数组的长度为 100。

如果必须写入字节数组的数据长度超过100字节怎么办?

这里的结果变量也是如此。我不明白这些长度是如何工作的,以及如果您不知道数据有多大,如何根据需要选择适当的字节数组长度?

try {
// Encode a String into bytes
String inputString = "blahblahblah";
byte[] input = inputString.getBytes("UTF-8");

// Compress the bytes
**byte[] output = new byte[100];**
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
compresser.end();

// Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output, 0, compressedDataLength);
**byte[] result = new byte[100];**
int resultLength = decompresser.inflate(result);
decompresser.end();

// Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
} catch(java.io.UnsupportedEncodingException ex) {
// handle
} catch (java.util.zip.DataFormatException ex) {
// handle
}

对于这个例子,这里用作输入的字节数组实际上称为缓冲区,我们如何理解它?

最佳答案

在这里,当您调用 compresser.deflate(output) 时,您无法知道 output 所需的大小,除非您知道此方法的工作原理。但这不是问题,因为输出意味着缓冲区

因此,您应该多次调用 deflate 并将 output 插入到另一个对象(例如 OutputStream)中,如下所示:

byte[] buffer = new byte[1024];   
while (!deflater.finished()) {
int count = deflater.deflate(buffer);
outputStream.write(buffer, 0, count);
}

膨胀也是如此。

关于java - 使用 Deflater 和 Inflater 的字节数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588765/

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