如何将 DataBuffer 的 Flux 转换为 Project Reactor 中字节数组的 Mono?

How to convert Flux of DataBuffer to Mono of byte array in Project Reactor?

有一个Flux<DataBuffer>。将其转换为 Mono<byte[]> 的自然方式是什么?

Mono<byte[]> mergeDataBuffers(Flux<DataBuffer> flux){
  // ?
}

使用 org.springframework.core.io.buffer.DataBufferUtils 将来自 Flux<DataBuffer> 的 DataBuffers 连接成一个 DataBuffer,然后将该缓冲区读入一个字节数组。


    Mono<byte[]> mergeDataBuffers(Flux<DataBuffer> dataBufferFlux) {
        return DataBufferUtils.join(dataBufferFlux)
                .map(dataBuffer -> {
                    byte[] bytes = new byte[dataBuffer.readableByteCount()];
                    dataBuffer.read(bytes);
                    DataBufferUtils.release(dataBuffer);
                    return bytes;
                });
    }

这样做时一定要考虑内存使用情况,因为这种方法会将所有数据加载到内存中两次(一次在 DataBuffers 中,然后在复制到 byte[] 中时再次加载)。