码迷,mamicode.com
首页 > 编程语言 > 详细

《JAVA NIO》Channel

时间:2016-07-18 14:04:22      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

1、类图

技术分享

Channle主要分为两类:File操作对应的FIleChannel和Stream操作对应的socket的3个channel。问题:stream操作除了socket还有其他的吧?例如串口等

3.1.1打开通道通道可以以多种方式创建。Socket 通道有可以直接创建新socket 通道的工??方法。但是一个FileChannel 对象却只能通过在一个打开的RandomAccessFile、FileInputStream 或 FileOutputStream对象上调用getChannel( )方法来获取。您不能直接创建一个FileChannel 对象。File 和socket 通道会

在后面的章节中予以详细讨论。
SocketChannel sc = SocketChannel.open( );
sc.connect (new InetSocketAddress ("somehost", someport));
ServerSocketChannel ssc = ServerSocketChannel.open( );
ssc.socket( ).bind (new InetSocketAddress (somelocalport));
DatagramChannel dc = DatagramChannel.open( );
RandomAccessFile raf = new RandomAccessFile ("somefile", "r");
FileChannel fc = raf.getChannel( );

3.1.2使用通道

技术分享

1、Channel是针对于Byte操作的

2、ReadonluByteChannel和WritableByteChannel是单双工的,ByteChannle是全双工的。

3、每一个file和socket的channle都实现了ByteChannel,按理来说都应该是全双工的,socket的channel确实是全双工的,但是FileChannel则不一定。

  我们知道,一个文件可以在不同的时候以不同的权限打开。从FileInputStream 对象的getChannel( )方法获取的FileChannel 对象是只读的,不过从接口声明的角度来看却是双向的,因为FileChannel 实现ByteChannel 接口。在这样一个通道上调用write( )方法将抛出未经检查的NonWritableChannelException 异常,因为FileInputStream 对象总是以read-only 的权限打开文件。

 4、通道可以以阻??(blocking)或非阻??(nonblocking)模式运行。非阻??模式的通道??远不会让调用的线程????。请求的操作要么立即完成,要么返回一个结果表明未进行任何操作。只有面向流的(stream-oriented)的通道,如sockets 和pipes 才能使用非阻塞式。

3.1.3关闭通道调用通道的close( )方法时,可能会导致在通道关闭底层I/O服务的过程中线程暂时阻?? 7,哪怕该通道处于非阻??模式。通道关闭时的阻??行为(如果有的话)是高度取决于操作系统或者文件系统的。在一个通道上多次调用close( )方法是没有??处的,但如果第一个线程在close( )方法中阻塞,那么在它完成关闭通道之前,任何其他调用close( )方法都会阻??。后续在该已关闭的通道上调用close( )不会产生任何操作,只会立即返回。

《JAVA NIO》Channel

标签:

原文地址:http://www.cnblogs.com/YDDMAX/p/5680113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!