나는 (이해할 때) Appache HttpComponents을 사용하는 elasticsearch에 base64로 json을 스트리밍하려고합니다.jackson에서 org.apache.http.entity.InputStreamEntity로 스트림 json 콘텐츠를 가져 오는 방법은 무엇입니까?
json 스트림의 경우 JsonGenerator
을 만들었지 만 "약간"OutputStream
이 필요합니다. Jest를 통해 요청을 보내려면 InputStreamEntity
을 "some"InputStream
에서 생성해야합니다. 따라서 JsonGenerator
은 쓰기 용 스트림이 필요하고 InputStreamEntity
스트림은 읽기 용입니다 (unknowOutputStream
및 unknowInputStream
변수). 스트림 (내가 이해하는 한)은 동일해야하지만 어떻게 만들어야합니까?
은 언뜻보기에 내가 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));
}
}