Java NIO 02=====Channel
2015-05-31 19:07
519 查看
Java NIO的通道类似流,但又有些不同:
既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
![](http://img.blog.csdn.net/20150531190755715?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvREVSUkFOVENN/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这些是Java NIO中最重要的通道的实现:
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
帮助
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。
既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
Channel的实现
这些是Java NIO中最重要的通道的实现:FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的 Channel 示例
下面是一个使用FileChannel读取数据到Buffer中的示例:RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw"); FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while (bytesRead != -1) { System.out.println("Read " + bytesRead); buf.flip(); while(buf.hasRemaining()){ System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } aFile.close();
帮助
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。
相关文章推荐
- qq聊天机器人 群发工具 (java版) (二)
- 启动Eclipse 弹出Failed to load the JNI shared library 的解决方法
- Java NIO 01=====概述
- Java NIO 00=====开篇
- java 访问活动目录代码
- JAVA导出CSV文件时产生乱码的解决方法
- JVM内存管理:深入Java内存区域与OOM
- 初学Hibernate
- 疯狂Java学习笔记(64)------------线程转换
- Java获取路径方法&相对路径读取xml文件方法
- 用Struts2标签实现Map的迭代
- JAVA反编译工具jad
- Spring2.5学习1.3_三种实例化bean的方式
- struts2表单提交的乱码的问题的解决
- eclipse ctrl + H 搜索问题 来自好搜
- 出现java.lang.NoSuchFieldException resourceEntries错误的解决方法
- Spring2.5学习1.4_bean的作用域及其实例化时期
- 用一重循环实现排序java
- Myeclipse2014破解教程及软件下载
- 打造Ubuntu下Java开发环境