如何最好地读取两次ByteBuffer?

时间:2019-07-16 14:50:51

标签: java bytebuffer

我得到一个DataBuffer作为输入参数,它是ByteBuffer的包装。现在,我想记录缓冲区的全部内容。此外,我必须将该缓冲区传递给外部库。

因此,由于我无法两次读取ByteBuffer,因此必须重置缓冲区,或者从String重新创建缓冲区。

问题:应该采用以下哪种方法(或者还有更好的方法)?

//Input:
DataBuffer dataBuffer;

//common logging:
ByteBuffer bb = dataBuffer.asByteBuffer();
String bufferContent = StandardCharsets.UTF_8.decode(bb).toString();
LOGGER.info(bufferContent);

//then either reset the buffer:
bb.rewind();
externalService.call(dataBuffer);

//or convert the string content back to buffer:
externalService.call(new DefaultDataBufferFactory().wrap(bufferContent.getBytes()));

1 个答案:

答案 0 :(得分:2)

Duplicate缓冲区,用于保留原件的位置,限制和标记值。

String bufferContent = StandardCharsets.UTF_8.decode(bb.duplicate()).toString();