如何将 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[]
中时再次加载)。
有一个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[]
中时再次加载)。