从 InputStream 获取 Publisher<ByteBuffer>

Get an Publisher<ByteBuffer> from InputStream

我刚刚升级了我的 mongo-db-java-驱动程序,现在方便的功能 GridFSBucket.uploadFromStream 已经消失了。因此我们现在得到一个

GridFSUploadPublisher<ObjectId> uploadFromPublisher(String filename, Publisher<ByteBuffer> source);

知道如何将我的 InputStream 转换成 Publisher<ByteBuffer> 吗? java 驱动程序或 Reactor 中是否有任何实用功能?

为了使其正常工作,可以读取流并将数据存储在 byte[] 数组中,稍后可以使用 ByteBuffer.wrap(byte[]) 方法对其进行包装。 我查看了较旧的 MongoDB 驱动程序的源代码,发现流被用作实际流,因此它当时并没有偷偷转换为 ByteBuffer。

似乎没有办法在数据到来时流式传输数据,现在除了将文件加载到内存中别无他法。我知道在很多情况下这可能是个问题,但也许我只是无法理解这种方法。

spring 框架中有一个实用程序可将输入流转换为数据缓冲区流量。并且直接将数据缓冲区映射为字节缓冲区。

Flux<ByteBuffer> byteBufferFlux = DataBufferUtils.readByteChannel(() -> Channels.newChannel(inputStream), DefaultDataBufferFactory.sharedInstance, 4096).map(DataBuffer::asByteBuffer);