NIO边看边记 之 channel(二)
2016-05-04 20:57
686 查看
通道channel就像流。通道中的数据总是先读到到buffer中(对于buffer来说是一个写操作),再从buffer中写到另一个通道总(相对于buffer来说是一个读操作)。
Channel主要分为两类:文件channel和网络channel,细分为4种。
FileChanel:从普通文件中读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:通过TCP读写网络中的数据
ServerSocketChannel:监听新进来的TCP连接,对每个新进来的连接都创建一个SocketChannel。
其中FileChannel不可以切换到非阻塞模式,不能应用到selector中。而所有套接字channel都可以应用到非阻塞模式。
示例代码如下:
Channel主要分为两类:文件channel和网络channel,细分为4种。
FileChanel:从普通文件中读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:通过TCP读写网络中的数据
ServerSocketChannel:监听新进来的TCP连接,对每个新进来的连接都创建一个SocketChannel。
其中FileChannel不可以切换到非阻塞模式,不能应用到selector中。而所有套接字channel都可以应用到非阻塞模式。
示例代码如下:
public static void main(String[] args) { try { //获取maven工程的resource的路径,这个获得的是绝对路径 String path = FileChannelTest.class.getResource("/").getPath(); //文件存放在resource目录下 String file = "data.txt"; RandomAccessFile randomAccessFile = new RandomAccessFile(path + file, "rw"); //创建channel FileChannel fileChannel = randomAccessFile.getChannel(); ByteBuffer byteBuffer = ByteBuffer.allocate(5000); //从channel中读取数据到buffer int byteRead = fileChannel.read(byteBuffer); while (byteRead != -1) { byteBuffer.flip(); while (byteBuffer.hasRemaining()) { System.out.println((char)byteBuffer.get()); } byteBuffer.clear(); byteRead = fileChannel.read(byteBuffer); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- spymemcached源码中Reactor模式分析
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序