字符串与字符串的奇怪转换

问题描述 投票:0回答:1

我有一个迷你服务器

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()));

其中两个将打印出不同的答案。为什么?

java string byte filecontentresult
1个回答
2
投票
new String(content).getBytes()

是将byte[]绕到Stringbyte[]

您正在使用JVM的默认字符集将byte[]转换为String。如果byte[]包含根据该字符集无效的字节序列,则这些字节无法准确地转换为char,因此它们将转换为...在String中您不期望的内容;所以当你转换回byte[]时,它们将不会与输入相同。

不要这样做:String逻辑上不是byte[],它是char[]。如果你想在byte[]中传输String,请先执行base64编码。

© www.soinside.com 2019 - 2024. All rights reserved.