Ple*_*mor 5 java inputstream jackson
我想找到最聪明的方法来InputStream从JsonNodeJava 库 Jackson 的a创建一个。
到目前为止,我已经完成了:
IOUtils.toInputStream(jsonNode.toString());
Run Code Online (Sandbox Code Playgroud)
但是,这种方式转换JsonNode成String创建之前InputStream。
前需要:
org.apache.http.entity.InputStreamEntity entity = new InputStreamEntity(IOUtils.toInputStream(jsonNode.toString()));
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,JSON 被编写为 UTF-8,如果使用 ObjectMapper 直接生成字节数组,则可以节省一些内存。
ObjectMapper objectMapper = new ObjectMapper();
JsonNode json = ...;
byte[] bytes = objectMapper.writeValueAsBytes(json);
Run Code Online (Sandbox Code Playgroud)
具体来说,Apache HTTP 客户端提供 ByteArrayEntity 与字节数组一起使用。对于其他用途,还有一个 ByteArrayInputStream。
当然,ObjectMapper 应该只创建一次并重复使用。
如果您确实希望以流式传输方式编写 JSON,则可以使用一对 PipedInputStream 和 PipedOutputStream,但是,如 JavaDoc 所述
通常,一个线程从对象读取数据,并由其他线程
PipedInputStream将数据写入相应的对象。PipedOutputStream不建议尝试在单个线程中使用这两个对象,因为这可能会导致线程死锁。
例子:
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) {
...
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5510 次 |
| 最近记录: |