byte array
的定义长度?例如,在这个例子中,我们在这里定义字节数组的长度是100。
byte array
的数据长于100 bytes
怎么办?这里的结果变量相同。我不明白这些长度是如何工作的,以及如果你不知道你的数据有多大,如何根据需要选择合适长度的字节数组?
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
}
对于这个例子,这里用作输入的字节数组实际上称为缓冲区,我们如何理解它?
答案 0 :(得分:0)
通过为字节数组分配100个字节,JVM保证足够大的缓冲区可以容纳100个JVM定义的字节(即8位)。任何以超过100个字节访问数组的尝试都会导致异常,例如如果您直接尝试按ArrayIndexOutOfBoundException
访问数组,请array[101]
。
如果代码是作为您的演示编写的,则调用者假定数据长度不超过100.
答案 1 :(得分:0)
此处,当您致电compresser.deflate(output)
时,您无法知道output
所需的尺寸,除非您知道此方法的工作原理。但这不是问题,因为output
意味着缓冲区。
因此,您应多次拨打deflate
并将output
插入OutputStream
之类的其他对象中,如下所示:
byte[] buffer = new byte[1024];
while (!deflater.finished()) {
int count = deflater.deflate(buffer);
outputStream.write(buffer, 0, count);
}
同样适用于膨胀。