gpt4 book ai didi

java - 如何将 json 内容从 jackson 流式传输到 org.apache.http.entity.InputStreamEntity?

转载 作者:行者123 更新时间:2023-12-02 12:11:59 33 4
gpt4 key购买 nike

我正在尝试将带有base64的json流式传输到使用Appache HttpComponents的elasticsearch中(据我了解)。

对于 json 流,我创建了 JsonGenerator,但它需要“一些”OutputStream。要通过 Jest 发送请求,需要从“某些”InputStream 创建 InputStreamEntity。因此,JsonGenerator 需要用于写入的流和用于读取的 InputStreamEntity 流(unknowOutputStreamunknowInputStream 变量)。流(据我理解)应该是相同的 - 但如何创建它?

乍一看,我可以使用类似 ByteArrayInputStream 的东西,但这样我就失去了流式传输,因为它将内容填充到 byte[] 中,因此所有流数据都将存储到内存中。如何创建一个流,该流将仅存​​储一段数据,直到读取该数据为止。然后保存另一条数据?

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import org.apache.http.HttpHost;
import org.apache.http.entity.InputStreamEntity;
import org.elasticsearch.client.RestClient;

import java.io.DataOutput;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Collections;

public class Exmaple {
public static void main (String[] args) throws Exception {
final InputStream inputStream;
final int size;

RestClient restClient = RestClient.builder(new HttpHost("myHost", 443, "https")).build();

final OutputStream unknowOutputStream;
final InputStream unknowInputStream;


final JsonGenerator generator = new JsonFactory().createGenerator(unknowOutputStream);
generator.writeStartObject();
generator.writeFieldName("content");
generator.writeBinary(inputStream, size);
generator.writeEndObject();


restClient.performRequest(
"POST",
"somepath",
Collections.emptyMap(), new InputStreamEntity(unknowInputStream));
}
}

最佳答案

可能有一个使用 PipedInputStream 的解决方案/PipedOutputStream 来自 JDK,但我想您在 HTTPClient 的 API 中从 InputStreamEntity 切换到 EntityTemplate 会更简单。

EntityTemplate是一个与 ContentProducer 一起使用的 HTTP 实体,而 ContentProducer 的唯一方法是 writeTo(OutputStream)。这样,您就不必桥接输入和输出流。

new EntityTemplate(new ContentProducer(
(outputStream) -> {
final JsonGenerator generator = new JsonFactory().createGenerator(outputStream);
generator.write(...);
}
));

(您可能想要创建子类,正确处理异常,...而不是使用 lambda。为了简单起见,我使用了一个)。

关于java - 如何将 json 内容从 jackson 流式传输到 org.apache.http.entity.InputStreamEntity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46471758/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com