我在我的代码中使用了杰克逊的JSON解析库(2.6.0),当我在一个节点上调用writeValue
时,我发现了一个奇怪的问题超过1000个字符的字符串。它不像往常一样编写String,而是用String" \ u0000"替换每个字符。
此代码按我的意图运行,输出{"problem":"aaaaaaaa...a"}
public void passingMethod() throws IOException {
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 1000; i++){
builder.append("a");
}
ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("problem", builder.toString());
mapper.writeValue(System.out, node);
}
通过将i
的范围更改为1001
而不是1000
,输出更改为{"problem":"\u0000\u0000\u0000...\u0000"}
。
public void failingMethod() throws IOException {
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 1001; i++){
builder.append("a");
}
ObjectMapper mapper = new ObjectMapper();
ObjectNode node = mapper.createObjectNode();
node.put("problem", builder.toString());
mapper.writeValue(System.out, node);
}
(注意:通常情况下,我会使用基础ObjectOutputStream
写入FileOutputStream
,而不是写入System.out
。)
由于我看到了这个错误,尝试使用不同类型的类来写入文件,因为我通过一个文件写入文件,所以我没有看到这个问题。 FileWriter
,但任何类型的OutputStream
都会重现问题,我需要能够使用ObjectOutputStream。
如果我是从未初始化的char[]
读取的话,输出看起来很像我期望的那样,但我不知道这实际上是不是在这里发生了什么,更不用说如何解决它。任何建议都会非常感激。
谢谢。