NIO基础介绍(一)

(1)Java.io中最为核心的一个概念是流(stream),面向流的编程。流是信息的载体。Java中一个流要么是输入流,要么是输出流,不可能同时既是输入流又是输出流。

(2)Java.nio中拥有3个核心概念:selector,channel,buffer。在java.nio中是面向块(block)或是缓冲区(buffer)编程的。Buffer本身就是一块内存,底层实现上,它实际上是个数组。数据的读、写都是通过Buffer来实现的(既能读又能写)。除了数组之外,Buffer还提供了对于数据的结构化访问方式,并且可以追踪到系统的读写过程。

(3)Java中的7个原生数据类型都有各自对应的Buffer类型,如IntBuffer,LongBuffer,ByteBuffer等,没有BooleanBuffer类型。

(4)Channel指的是可以向其写入数据或从中读取数据的对象,它类似于java.io中的Stream。所有数据的读写都是通过Buffer来进行的,永远不会出现直接channel写入数据的情况,或是直接从Channel读取数据的情况。不同的是,java.io中的一个流只能是OutputStream或是InputStream。由于Channel是双向的,因此它能更好地反映出底层操作系统的真实情况:在linux系统中,底层操作系统的通道就是双向的。

public class nioTest1 {//随机数输出
    public static void main(String[] args) {
        IntBuffer buffer = IntBuffer.allocate(10);
        for(int i = 0; i 0){
            byte b = byteBuffer.get();
            System.out.println("Character: " + (char)b);
        }

        fileInputStream.close();

    }
    @Test
    public void TestOutputNio() throws Exception {
        FileOutputStream fileOutputStream = new FileOutputStream("nioOutput.txt");
        FileChannel fileChannel = fileOutputStream.getChannel();
        ByteBuffer byteBuffer = ByteBuffer.allocate(512);
        byte[] message = "Hello world".getBytes();//要写的信息定义到数组中

        for(int i = 0; i

 

你可能感兴趣的:(Netty)