如何解决从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。
似乎没有其他方法可以流式传输数据,没有其他方法可以将文件加载到内存中。我可以看到在很多情况下这是一个问题,但是也许我只是不了解这种方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。