Jur*_*eld 5 java streaming http
我有一个InputStream
和将要输出的数据的大小(HTTP 请求的响应)。由于空间复杂性的原因,我无法阅读全文。我想要的是将数据直接发送到新的请求正文中。我尝试使用 OkHttp 执行此操作,但无法使其工作。我不知道有任何其他 HTTP 客户端可以做到这一点。
如果可能的话,我想避免与Socket
. 有什么建议吗?
编辑:添加的限制是该解决方案必须与 Java 8 一起使用
HttpClient
我相信Java 11 中的新标准化应该可以让您做到这一点。它使用Flow
API(反应流),您可以提供一个BodyHandler
/BodySubscriber
来请求/接收字节。它还允许您在发送请求时HttpClient
指定 a 。BodyPublisher
因此,只需将请求发布者转发的订阅绑定到其订阅者,绑定到BodySubscriber
Http 堆栈分发给的订阅,然后让 的BodySubscriber
(onNext
等等)调用Publisher
订阅者的相应方法即可。请注意,这是一个学术描述:我实际上并没有尝试实现它。设置订阅链接可能需要一些思考和一些技巧,但我相信它应该有效。
但是,请确保您的实现BodySubscriber
/BodyPublisher
遵守反应式流语义 - 并且它们不会阻塞回调。
https://docs.oracle.com/en/java/javase/11/docs/api/java.net.http/java/net/http/HttpClient.html https://openjdk.java.net/groups/net /httpclient/intro.html
再想一想,也许这不是您要问的:如果您已经有一个,InputStream
那就更简单了:只需BodyPublishers.ofInputStream
在发送请求时使用即可。
归档时间: |
|
查看次数: |
6827 次 |
最近记录: |