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

diz*_*iaq 5 java project-reactor spring-webflux

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

Mono<byte[]> mergeDataBuffers(Flux<DataBuffer> flux){
  // ?
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*lay 19

用于org.springframework.core.io.buffer.DataBufferUtils将 DataBuffers 从 加入Flux<DataBuffer>到单个 中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;
                });
    }
Run Code Online (Sandbox Code Playgroud)

执行此操作时请务必考虑内存使用情况,因为此方法会将所有数据加载到内存中两次(一次在 DataBuffer 中,然后在复制到 中时再次加载byte[])。