从InputStream获取Publisher <ByteBuffer>

问题描述

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

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

有什么想法如何将InputStream转换为Publisher<ByteBuffer>? Java驱动程序或Reactor中是否有任何实用程序?

解决方法

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

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

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

似乎没有其他方法可以流式传输数据,没有其他方法可以将文件加载到内存中。我可以看到在很多情况下这是一个问题,但是也许我只是不了解这种方法。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...