0

我之前问过这个关于使用 netty 有效地将消息写入网络的问题。现在在它的阅读方面还有一个更紧迫的问题。至少在编写消息时,可以控制用作中间存储的字节缓冲区(因此可以编写代码以重用缓冲区),但在 Netty 的读取端(即上游事件),OioWorker 和 NioWorker 类完全使无法插入byte[]用于从网络读取的 InputStream. 例如, 调用的run()方法来读取字节。OioWorker此方法创建一个新的 byte[] 。

我怎样才能告诉 Netty 停止这样做并可能重用一些 ChannelBuffer ?(我知道会有线程问题 - 我准备处理这些 - 事实上我在单线程上运行整个读取操作)

4

1 回答 1

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());
    ...
  }
于 2012-06-07T07:29:59.457 回答