我想找到从 Java 库 Jackson 的 InputStream
中创建 JsonNode
的最聪明的方法。
到目前为止,我已经完成了:
IOUtils.toInputStream(jsonNode.toString());
但是这种方式在创建
JsonNode
之前将 String
转换为 InputStream
。前需要:
org.apache.http.entity.InputStreamEntity entity = new InputStreamEntity(IOUtils.toInputStream(jsonNode.toString()));
最佳答案
ObjectMapper objectMapper = new ObjectMapper();
JsonNode json = ...;
byte[] bytes = objectMapper.writeValueAsBytes(json);
具体来说,Apache HTTP 客户端提供了 ByteArrayEntity 用于字节数组。对于其他用途,有一个 ByteArrayInputStream。
当然,ObjectMapper 应该只创建一次并重复使用。
例子:
ObjectMapper objectMapper = new ObjectMapper();
JsonNode json = ...;
PipedInputStream in = new PipedInputStream();
new Thread(() -> {
try {
IOUtils.copy(in, System.out);
} catch (IOException e) {
...
}
}).start();
try (
PipedOutputStream out = new PipedOutputStream(in);
JsonGenerator gen = objectMapper.getFactory().createGenerator(out);
) {
gen.writeTree(json);
} catch (IOException e) {
...
}
关于java - 从 Jackson JsonNode 创建 InputStream 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39660690/