我之前曾问过this关于使用netty有效地将消息写入网络的问题。现在,阅读方面的问题更加紧迫。至少在编写消息时,可以控制用作中间存储的字节缓冲区(因此可以编写代码来重用缓冲区),但在Netty的读取端(即上游事件),OioWorker和NioWorker类完全使用无法从网络byte[]
插入用于阅读的InputStream
。
例如,调用run()
OioWorker
方法来读取字节。此方法创建一个新的byte []。
我怎么能告诉Netty停止这样做并且可能重用一些ChannelBuffer? (我知道会有线程问题 - 我准备处理那些 - 事实上我在单线程上运行整个读操作)
答案 0 :(得分:0)
使用java ThreadLocal<T>
。
private static final ThreadLocal<ChannelBuffer> headBuffer = new ThreadLocal<ChannelBuffer>() {
@Override
protected ChannelBuffer initialValue() {
return ChannelBuffers.buffer(DEFAULT_HEAD_LENGTH);
}
};
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
...
headBuffer.get().clear();
headBuffer.get().writeBytes(outboundHeadBuff);
e.getChannel().write(headBuffer.get());
...
}