文章目录
8 Data Buffers and Codecs
java NIO提供了ByteBuffer但是很多库是基于byte bufferAPI的在上层封装,特别是buffer的重用,和直接使用buffer。例如netty有自己的ByteBuf借口。jetty有池化的byte buffer(带一个回调去释放)。Spring-core提供了一系列抽象的byte buffer APIs。
- DataBufferFactory databuffer的抽象创造
- DataBuffer 代表 byte buffer可能被池化
- DataBufferUtils 提供data buffer工具API
- Codecs 高级对象的decode和encode。
8.1 DataBufferFactory
DataBufferFactory创建data buffers使用以下两种方式。
- 分配一个新的数据缓冲区,可以选择预先指定容量(如果已知),即使DataBuffer的实现可以按需增长和缩小,该容量也会更有效。
- 包装一个现有的byte[]或java.nio.ByteBuffer,它们用DataBuffer实现修饰给定的数据,并且不涉及allocation。
请注意,WebFlux应用程序不会直接创建DataBufferFactory,而是通过客户端的ServerHttpResponse或ClientHttpRequest访问它。工厂的类型取决于基础客户端或服务