内容目录
3.1.1 打开通道
通道是访问 I/O 服务的导管。正如我们在第一章中所讨论的,I/O 可以分为广义的两大类别: File I/O 和 Stream I/O。那么相应地有两种类型的通道也就不足为怪了,它们是文件(file)通道和套接字(socket)通道。如果您参考一下图 3-2,您就会发现有一个FileChannel
类和三个socket通道类:SocketChannel
、ServerSocketChannel
和 DatagramChannel
。
通道可以以多种方式创建。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.5 节中您会发现,java.net
的socket类也有新的getChannel()
方法。这些方法虽然能返回一个相应的socket通道对象,但它们却并非新通道的来源,RandomAccessFile.getChannel()
方法才是。只有在已经有通道存在的时候,它们才返回与一个 socket 关联的通道;它们永远不会创建新通道。
0 条评论
撰写评论