【问题标题】:Simple Netty handler, iterate through message byte by byte简单的 Netty 处理程序,逐字节迭代消息
【发布时间】:2012-03-15 21:23:08
【问题描述】:

是否有一个非常简单的 Netty 处理程序的示例,它可以简单地获取网络上发送的任何数据并将其写入文件?

我在想一些类似的事情:

public class SimpleHandler extends SimpleChannelUpstreamHandler {

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        HttpRequest request = (HttpRequest) e.getMessage();
        // get data from request and write to a file
}

有什么想法吗?感谢您的任何想法

【问题讨论】:

    标签: java netty


    【解决方案1】:

    您也可以只使用此方法将 ChannelBuffer 的内容传输到 OutputStream:

    http://netty.io/docs/stable/api/org/jboss/netty/buffer/ChannelBuffer.html#readBytes(java.io.OutputStream,%20int)

    所以是这样的:

    public class FileWriterHandler extends SimpleChannelHandler {
        private final String filename;
    
        public FileWriterHandler(String filename) {
            this.filename = filename;
        }
    
        @Override
        public void messageReceived(ChannelHandlerContext context, MessageEvent event) throws Exception{
            ChannelBuffer buffer = (ChannelBuffer)event.getMessage();
            FileOutputStream out = null;
            try {
                out = new FileOutputStream(filename, true)
                buffer.readBytes(out, buffer.readableBytes());
            } finally {
                if (out != null) out.close();
            }
        }
    }   
    

    【讨论】:

      【解决方案2】:

      前段时间我写了一个来测试:

      public class FileWriterHandler extends SimpleChannelHandler {
          private final String filename;
      
          public FileWriterHandler(String filename) {
              this.filename = filename;
          }
      
          @Override
          public void messageReceived(ChannelHandlerContext context, MessageEvent event) {
              ChannelBuffer buffer = (ChannelBuffer)event.getMessage();
              byte[] bytes = new byte[buffer.readableBytes()];
              buffer.readBytes(bytes);
              try {
                  DataOutputStream stream = new DataOutputStream(new FileOutputStream(filename, true));
                  stream.write(bytes, 0, bytes.length);
                  stream.flush();
                  stream.close();
              } catch (IOException ex) {
                  throw runtime(ex);
              }
          }
      }
      

      这只是为了测试,因此我只是重新抛出异常,并没有真正正确地处理它们。希望对您有所帮助。

      你可以这样设置:

      ServerBootstrap bootstrap = initializedSomehow();
      bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
          @Override
          public ChannelPipeline getPipeline() {
              return pipeline(new FileWriterHandler("yourfile.txt"));
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 1970-01-01
        • 2019-09-16
        • 2012-06-08
        • 2012-06-21
        相关资源
        最近更新 更多