一、NIO编程的理解

一、NIO与IO的区别

1.NIO是在IO的基础上进行改进,NIO是一个可以替代标准IO API的API(从Java 1.4开始),NIO提供了与标准IO不同的IO工作方式。

2.NIO是一个非阻塞的IO(通道+缓冲区),面向缓冲区的,而IO是阻塞的,面向流。

二、代码测试

1.BufferTest.java

/**
 * 缓冲区是NIO 提高给传输文件和通道一起配合使用,存储数据.<br>
 * Buffer<br>
 * ByteBuffer<br>
 * LongBuffer<br>
 * InteigBuffer<br>
 * FloatBuffer<br>
 * DubboBuffer<br>
 *
 * Created by ChenMingXu on 2019/6/1.
 */
public class BufferTest {
    /**
     * position<br> 缓冲区正在操作的位置 默认从0开始。
     * limit<br>  界面(缓冲区可用大小)
     * capacity;<br> 缓冲区最大容量,一旦声明不能改变
     *
     * 核心方法:
     * put() 往buff存放数据
     * get() 获取数据
     *
     *  */
    public static void main(String[] args) {
        //初始化byteBuffer的大小
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        System.out.println(byteBuffer.position());
        System.out.println(byteBuffer.limit());
        System.out.println(byteBuffer.capacity());
        System.out.println("----------往bytebuff存放数据....----------");
        byteBuffer.put("abcd1".getBytes());
        System.out.println(byteBuffer.position());
        System.out.println(byteBuffer.limit());
        System.out.println(byteBuffer.capacity());
        System.out.println("----------读取值...----------");
        //开启读取模式,把position的值置为0,然后往后面循环读取,没有值就不读取了
	//byteBuffer.flip();
        System.out.println("position:"+byteBuffer.position());
        System.out.println(byteBuffer.limit());
        System.out.println(byteBuffer.capacity());
        byte[] bytes= new byte[byteBuffer.limit()];
        byteBuffer.get(bytes); //43行
        System.out.println(new String(bytes,0,bytes.length));
    }
}

1.1.测试结果(上面的代码注释掉,就会保下面的错)

0
1024
1024
----------往bytebuff存放数据....----------
5
1024
1024
----------读取值...----------
position:5
1024
1024
Exception in thread "main" java.nio.BufferUnderflowException
	at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:151)
	at java.nio.ByteBuffer.get(ByteBuffer.java:715)
	at com.ysfj.BufferTest.main(BufferTest.java:43)

1.2.注释打开之后的结果

0
1024
1024
----------往bytebuff存放数据....----------
5
1024
1024
----------读取值...----------
position:0
5
1024
abcd1
发布了122 篇原创文章 · 获赞 64 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/chenmingxu438521/article/details/90728942
今日推荐