java - 从 ServerRequest 中提取 InputStream
问题描述
我一直想从reactive.function.server.ServerRequest
正文中提取 inputStream 但无济于事。到目前为止,我已经尝试了一些我在这里和其他地方找到的方法,最后又遇到了同样的问题,那就是 ->
鉴于此摘录:
经过检查,我得到了这个 inputStream,这显然是不对的:
PipedInputStream
如果在我的情况下使用或实际上任何其他对象实际上可以实现这种转换,有什么想法吗?
解决方案
一个DataBuffer
罐头本身就可以完成这项工作。它有一个asInputStream
方法。
但是,您可能会问错误的问题:
几乎所有的 InputStreams,当然还有来自网络连接的输入流,从根本上说是一个阻塞概念,并且您使用的是响应式,这意味着如果您阻塞,您的代码将从根本上被破坏。
换句话说,作为一般经验法则,“我使用反应式!” 和“我想要一个输入流!” 是互斥的。你..不想要输入流。
如果必须的话,您需要一点异国情调的独角兽:一个保证不会阻塞的 InputStream。实际上只有一种方法可以创建这样一个野兽,即将所有数据泵入内存(希望它不是特别大量的数据!)然后创建一个输入流,只提供已经加载到内存中的字节:这样流不会阻塞。ByteArrayInputStream
是这种流的一个例子。想必asInputStream
DataBuffer的方法是另外一种。
推荐阅读
- java - 为什么几秒钟后我的刷新比开始后立即刷新要慢
- node.js - bulkWrite - 类型错误:无法在 applyTimestampsToUpdate 的数字 '0' 上创建属性 '$set' - mongoose 或 mongodb
- c# - WCF 客户端,XML 命名空间前缀导致空对象
- java - 如何为 ExecutorServices 编写测试用例?
- intellij-idea - IntelliJ 不会从 Lombok 找到生成的代码,而 gradle 会
- c# - 为什么我无法在 LINQ Select() 查询中向 StringBuilder 插入值
- python - 简单的数据操作:R vs python
- c# - 如何将范围应用于 NServiceBus 行为中间件中的日志
- web-component - 我什么时候可以在 `shadowRoot` 上使用 `querySelector`?
- python - SpaCy - ValueError:操作数无法与形状一起广播(1,2)(1,5)