美文网首页
Java NIO系列1

Java NIO系列1

作者: 唐影若凡 | 来源:发表于2017-03-16 16:21 被阅读0次

声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87

1、概述

Java BIO(标准IO)中, 提供了基于流的IO实现,即InputstreamOutputstream。也就是已字节为单位处理数据。

Java NIO是Java New IO的简称,是一套新的完全可以替代Java IO的机制。与BIO不同的是,NIO是基于块(Block)实现的,以块为基本单位处理数据。

除此之外,NIO还加入了以下特性:

  • Buffer:为所有的基本数据类型提供了Buffer支持
  • Charset:使用Java.nio.charset.Charset 作为字符集编码方案
  • Channel:增加Channel作为新的原始IO接口
  • 锁、内存映射:增加锁和内存映射的文件访问接口
  • selector:提供了基于selector的异步网络IO

Buffer是一块连续的内存块,是NIO读写数据的中转地。
Channel是缓冲数据的源头或目的地,用于向缓冲读取/写入数据,是访问Buffer的接口。

Channel和Buffer

2、Channel和Buffer

NIO中,Buffer为一个抽象类。并为每个基本数据类型创建了一个Buffer。除了ByteBuffer之外,其他基本类型的Buffer,都有完全相同的成员方法和操作。是由于ByteBuffer多用于大部分BIO操作的接口,具有一些特殊的方法。

NIO中,配合Buffer使用的有Channel。Channel与Stream最大的不同是,Channel是一个双向通道。使用NIO中,Channel不能单独使用,必须通过配合Buffer使用。例如,在对一个Channel进行读操作时,首先将数据从Channel写入到相应的Buffer中,之后在Buffer中进行读取。

public static void readAndWriteFile(String src, String dst) throws IOException {

        FileInputStream fis  = new FileInputStream(src);
        FileOutputStream fos = new FileOutputStream(dst);

        FileChannel readChannel  = fis.getChannel();
        FileChannel writeChannel = fos.getChannel();

        ByteBuffer buffer = ByteBuffer.allocate(1024); // 1KB

        while (true) {
            buffer.clear();
            int readLen = readChannel.read(buffer);
            if (readLen == -1) {
                break;
            }
            buffer.flip();
            writeChannel.write(buffer);
        }
        readChannel.close();
        writeChannel.close();
    }

上例是一个简单的使用NIO读取并写入的操作。可以看到,读取文件时,打开文件并获取文件的Channel,并将数据读入到空的Buffer中;同样地写入时,需要将有数据的Buffer写入到Channel中。对Channel进行读写操作时,都需要Buffer的配合。

相关文章

  • java NIO详解

    Java NIO系列教程(1):Java NIO 概述 NIO学习系列:缓冲区内部实现机制 Java NIO系列教...

  • java NIO

    并发编程网 - Java NIO系列教程 javaeye - Java NIO 系列教程 NIO 入门 Java ...

  • Netty文章概括

    1、Java NIO系列教程(一) Java NIO 概述 http://ifeve.com/overv...

  • Java Nio 之Buffer

    Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(...

  • Java Nio 之高级搬运工(FileChannel)二

    Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(...

  • Java Nio 之高级搬砖工(FileChannel) 一

    Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(...

  • Java Nio 之直接内存

    Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(...

  • Java学习资源收集

    Java基础核心 Java NIO Java NIO系列教程(并发编程网) 攻破JAVA NIO技术壁垒 Java...

  • Java NIO系列1

    声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、概...

  • Java NIO

    参考链接:Java NIO Tutorial 1. Java NIO 概览: NIO:Non-block IO,非...

网友评论

      本文标题:Java NIO系列1

      本文链接:https://www.haomeiwen.com/subject/uazxgttx.html