nio pipe SourceChannel.read()读取阻塞?

问题描述

nio pipe SourceChannel.read()读取阻塞?

代码显示java NIO中SourceChannel.read()是阻塞,在没有读取到数据的时候,read函数会一直阻塞,这是为什么?求解,谢谢

解决方案

read就是从管道里面读取数据,你现在没有数据当然就阻塞了

时间: 2024-10-06 12:37:51

nio pipe SourceChannel.read()读取阻塞?的相关文章

《Java NIO文档》非阻塞式服务器

即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel,Buffer等组件),但是想要设计一个非阻塞的服务器仍然是一件很困难的事.非阻塞式服务器相较于阻塞式来说要多上许多挑战.本文将会讨论非阻塞式服务器的主要几个难题,并针对这些难题给出一些可能的解决方案. 查找关于非阻塞式服务器设计方面的资料实在不太容易,所以本文提供的解决方案都是基于本人工作和想法上的.如果各位有其他的替代方案或者更好的想法,我会很乐意听取这些方案和想法!你可以在文章下方留下你的评论,或者发邮件给我(

nio socket 异步客户端读取时的问题!

问题描述 最近学习java的nio socket非阻塞模式编程服务器端发送信息格式如下: 8位的头部包含类型和信息的长度 如 LLWH002001234567890123456789,后面的信息中包含gb2312编码的汉字.写客户端的时候碰到个问题:SocketChannel的read(ByteBuffer[] dsts, int offset, int length)方法还没弄清楚怎么使用.服务端发来 LLWH002001234567890123456789 这个消息时,用read(ByteB

Android NIO(Noblocking I/O非阻塞I/O)小结

参考:http://www.cnblogs.com/cpcpc/archive/2011/06/27/2123009.html   对于Android的网络通讯性能的提高,我们可以使用Java上高性能的NIO (New I/O) 技术进行处理,NIO是从JDK 1.4开始引入的,NIO的N我们可以理解为Noblocking即非阻塞的意思,相对应传统的I/O,比如Socket的accpet().read()这些方法而言都是阻塞的.   NIO主要使用了Channel和Selector来实现,Jav

java NIO 关于SocketChannel 循环读取最后一次慢的问题求助。

问题描述 做了个测试如果用if(channel.read(buffer)!=-1)只读取一次速度很快可以4,5M的流在188ms左右(但是由于不确定是否结束,所以不能从根本上解决问题),但如果用while(channel.read(buffer)!=-1),在最后一次时速度很慢基本在15秒左右,网上看了好多资料试了都不行,高手请帮忙,谢谢.注:如果使用HttpsURLConnection方式循环的话,速度感觉慢在2秒以上.privatevoidsendPostNew(Stringhost,int

Java NIO系列教程(十一) Pipe

原文链接     作者:Jakob Jenkov     译者:黄忠       校对:丁一 Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pipe.open()方法打开管道.例如: 1 Pipe pipe = Pipe.open(); 向管道写数据 要向管道写数据,需要访问sink通道.像这样: 1 Pipe.SinkChannel sinkCh

java的nio之:java的nio系列教程之pipe

Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pipe.open()方法打开管道.例如: 1 Pipe pipe = Pipe.open(); 向管道写数据 要向管道写数据,需要访问sink通道.像这样: 1 Pipe.SinkChannel sinkChannel = pipe.sink(); 通过调用SinkChannel的write()方法,

Java NIO 系列教程

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO.感谢并发编程网的翻译和投递.  (关注ITeye官微,随时随地查看最新开发资讯.技术文章.)  [本文转载于 Java NIO 系列教程] Java NIO提供了与标准IO不同的IO工作方式:  Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channe

Java NIO 系列教程(转)

原文中说了最重要的3个概念,Channel 通道Buffer 缓冲区Selector 选择器其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为nio可以使用异步的非堵塞模式才加入的东西.以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的时候,不管水到了没有,你就都只能耗在接水(流)上.nio的Channel的加入,相当于增加了水龙头(有阀门),虽然一个时刻也只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各

攻破JAVA NIO技术壁垒

现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty.学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能.再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer. 驱使博主写这篇文章的关键是网上关于NIO的文章并不是很多,而且案例较少,针对这个特性,本文主要通过实际案例主要讲述NIO的用法,每个案例都经过实际检验.博