从 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);
我刚刚升级了我的 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);