我有一个迷你服务器
byte[] content = fileManager.get(request.getUri());
在这里,我获取服务器上文件的内容 接下来我生成压缩和分块
content = process(content, response);
private byte[] process(byte[] content, Response response) {
ProcessorList processors = new ProcessorList();
processors.add(new CompressDelegator(new GZIPCompressor()));
processors.add(new ChunkDelegator(new Chunker(30)));
content = processors.process(content, response);
return content;
}
之后,在文件的压缩和分块内容中发生了一些惊人的事情
System.out.println(Arrays.toString(content));
System.out.println(Arrays.toString(new String(content).getBytes()));
其中两个将打印出不同的答案。为什么?
new String(content).getBytes()
是将byte[]
绕到String
到byte[]
。
您正在使用JVM的默认字符集将byte[]
转换为String
。如果byte[]
包含根据该字符集无效的字节序列,则这些字节无法准确地转换为char
,因此它们将转换为...在String
中您不期望的内容;所以当你转换回byte[]
时,它们将不会与输入相同。
不要这样做:String
逻辑上不是byte[]
,它是char[]
。如果你想在byte[]
中传输String
,请先执行base64编码。