gpt4 book ai didi

java - Jersey 2 客户端将数据流逐 block 写入 POST 调用

转载 作者:行者123 更新时间:2023-12-01 09:36:02 25 4
gpt4 key购买 nike

我想编写一个 Jersey 2 客户端,它将数据流逐 block 写入 POST 调用。

为什么? ,这将帮助我避免在通过 POST 调用发送之前将整个输入流请求数据存储在磁盘内存中。

我已经在网上搜索并研究了 Jersey2 API,但没有找到任何解决方案,但是服务器端有解决方案,它在流中发送巨大的响应,并通过在 Jersey 客户端中执行 GET 调用来读取相同的响应客户端,但我想通过 POST 调用将巨大的有效负载(例如 1 GB 的 XML 数据)作为流发送。

我尝试使用 here 中给出的解决方案,但是这个解决方案再次使用系统内存。

我不想在磁盘中存储 1GB 数据,而是动态创建 1GB 数据请求流/将 1GB 数据直接逐 block 写入 POST 调用。

非常感谢任何帮助。提前致谢。

最佳答案

经过大量研究后,我找到了解决方案,如下:

首先我们需要实现javax.ws.rs.core.StreamingOutput,如下所述:

public class JerseyStreamingOutput implements StreamingOutput {




/**
* Overriding the write method to write request data directly to Jersey outputStream .
* @param outputStream
* @throws IOException
* @throws WebApplicationException
*/
@Override
public void write(OutputStream outputStream) throws IOException, WebApplicationException {

// Write to Jersey OutputStream chunk by chunk here
}
}

Jersey 客户端代码:

JerseyStreamingOutput jerseyStreamingOutput =
new JerseyStreamingOutput();
WebTarget target = client.target("http:localhost:8080");
response = target.path("/somepath").
request().post(Entity.entity(jerseyStreamingOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE));

因此,上述解决方案通过将请求 block 逐 block 写入 outputStream 来帮助节省硬盘内存,如果没有这种方法,我们最终将在硬盘中保留 1GB 的请求 xml 文件。

关于java - Jersey 2 客户端将数据流逐 block 写入 POST 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919684/

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