加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用CompletionHandlers和小于请求的ByteBuffer读取请求?

发布时间:2020-05-24 04:10:38 所属栏目:Java 来源:互联网
导读:我正在使用Java 7和AsynchronousSocketChannel.我想阅读一个请求(例如HTTP POST)但我很难想出一个很好的解决方案来读取完整的请求,如果它比ByteBuffer的大小我是使用.例如.如果ByteBuffer是4048字节,HTTP POST包含的图像大于4kB.这有什么好的递归解决方案或循

我正在使用Java 7和AsynchronousSocketChannel.我想阅读一个请求(例如HTTP POST)但我很难想出一个很好的解决方案来读取完整的请求,如果它比ByteBuffer的大小我是使用.例如.如果ByteBuffer是4048字节,HTTP POST包含的图像大于4kB.

这有什么好的递归解决方案或循环吗?

这是我的阅读请求代码:

public void readRequest(final AsynchronousSocketChannel ch) {
    final ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
    final StringBuilder strBuilder = new StringBuilder();
    final CharsetDecoder decoder = Charset.forName("US-ASCII").newDecoder();

    ch.read(buffer,null,new CompletionHandler

我写的地方:

// More data to read
ch.read(...);

它看起来是代码重用的好地方,但我无法想出一个很好的解决方案.有什么方法可以在这里重用CompletionHandler吗?有关使用有限的ByteBuffer阅读完整请求的任何建议?

我想以非阻塞和异步方式解决这个问题.

最佳答案 在读取数据块时,从java管理的线程异步调用complete方法.要重用CompletionHandler:

// More data to read
ch.read(buffer,this); //here you pass the same CompletionHandler you are using

java人员建议当你完成读操作(else块)时,你应该使用另一个线程上下文.

这是为了避免在CompletionHandler中阻塞和长期操作的文档,请参阅第33页http://openjdk.java.net/projects/nio/presentations/TS-4222.pdf

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读