您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2013年08月16日 11:43

原创 Java nio入门教程详解(十四)

1123 次浏览 读完需要≈ 3 分钟

内容目录

3.1.1 打开通道

通道是访问 I/O 服务的导管。正如我们在第一章中所讨论的,I/O 可以分为广义的两大类别: File I/O 和 Stream I/O。那么相应地有两种类型的通道也就不足为怪了,它们是文件(file)通道和套接字(socket)通道。如果您参考一下图 3-2,您就会发现有一个FileChannel类和三个socket通道类:SocketChannelServerSocketChannel DatagramChannel

通道可以以多种方式创建。Socket通道有可以直接创建新socket通道的工厂方法。但是一个FileChannel对象却只能通过在一个打开的RandomAccessFileFileInputStream 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 关联的通道;它们永远不会创建新通道。

Java nio入门教程详解(十五)

  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论