所谓的NIO,是new io的缩写,它提供了buffer的功能来提交io的性能。jdk从1.4之后开始提供相关操作。
基本结构:Buffer抽象类的一系列子类实现,其中BooleanBuffer不存在,也没必要缓冲。具体如下:,,,,,
Buffer有四个基本属性:
1、capacity 容量,buffer能够容纳的最大元素数目,在Buffer创建时设定并不能更改
2、limit buffer中有效位置数目
3、position 下一个读或者写的位置
4、mark 用于记忆的标志位,配合reset()使用,初始值未设定,调用mark后将当前position设为值
四者关系:0 <= mark <= position <= limit <= capacity
同时针对各中数据结构,提供了通道(channel)的概念,可以针对该数据结构进行双向操作。
例1:ByteBuffer使用
- ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
- byteBuffer.put("hello wolrd".getBytes());
- System.out.println(byteBuffer.position());
- System.out.println(byteBuffer.capacity());
- System.out.println(byteBuffer.limit());
例2:文件内容拷贝
- String infile = "C:\\from.txt";
- String outfile = "C:\\to.txt";
-
- FileInputStream fin = new FileInputStream(infile);
- FileOutputStream fout = new FileOutputStream(outfile);
-
- FileChannel fcin = fin.getChannel();
- FileChannel fcout = fout.getChannel();
-
- ByteBuffer buffer = ByteBuffer.allocate(1024);
- while (true) {
-
- buffer.clear();
-
- int r = fcin.read(buffer);
-
- if (r == -1) {
- break;
- }
-
- buffer.flip();
-
- fcout.write(buffer);
- }
更多例子,参考:
本文转自 zhouhaipeng 51CTO博客,原文链接:http://blog.51cto.com/tianya23/707292,如需转载请自行联系原作者