📜  Java IO 和Java NIO 的区别(1)

📅  最后修改于: 2023-12-03 15:15:56.264000             🧑  作者: Mango

Java IO 和 Java NIO 的区别

简介

Java IO 和 Java NIO 都是 Java 的输入输出操作,但它们有很大的不同之处。Java IO 是 Java 最初提供的标准 IO 操作,而 Java NIO 是在 Java 1.4 中引入的新的 IO API。 Java IO 主要是面向流(stream)的,而 Java NIO 则是面向缓冲区(buffer)的。

Java IO

Java IO 是通过 java.io 包中的类和接口进行实现的。输入流和输出流是 Java IO 中最重要的两个概念。Java IO 通过使用流来执行数据输入和输出。流是字节序列,因此 Java IO 只能操作字节。

Java IO 中的流可分为字节流和字符流。通过字节流,程序可以操作二进制数据,而通过字符流,程序可以操作 Unicode 数据。Java IO 中提供了很多种类型的流,如 FileInputStream、FileOutputStream、BufferedInputStream 等。

Java IO 的优点在于其简单易用。Java IO 以流的形式来处理数据,它为程序员屏蔽了底层机制,只是提供了一个简单的接口,使数据的输入输出变得容易。

Java NIO

Java NIO 也叫做 New IO,它是在 Java 1.4 中引入的新 IO API。Java NIO 可以通过 java.nio 包中的类和接口来实现。与 Java IO 不同,Java NIO 支持面向缓冲区的 IO 操作。

Java NIO 中的核心概念是缓冲区、通道(channel)以及选择器(selector)。通道是双向的,可以进行读写操作。缓冲区则是从通道中读取或写入数据的容器。

Java NIO 提供了很多种类型的通道和缓冲区,如 FileChannel、ByteBuffer、MappedByteBuffer 等。

Java NIO 的优点在于其高性能。Java NIO 可以进行非阻塞的 IO 操作,它使用缓冲区来减少系统调用的数量,提高性能。

区别总结
  • Java IO 是面向流的,而 Java NIO 是面向缓冲区的。
  • Java IO 只能操作字节,而 Java NIO 可以操作字节和字符。
  • Java IO 是阻塞的,而 Java NIO 是非阻塞的。
  • Java IO 中每个 IO 操作都会导致系统调用,而 Java NIO 中可以通过缓冲区来减少系统调用的数量,提高性能。
示例代码
Java IO
FileInputStream fis = new FileInputStream("path/to/file");
DataInputStream dis = new DataInputStream(fis);

int data = dis.readInt();
dis.close();
Java NIO
FileInputStream fis = new FileInputStream("path/to/file");
FileChannel fc = fis.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(1024);
fc.read(buffer);
buffer.flip();

while (buffer.hasRemaining()) {
    System.out.print((char) buffer.get());
}

fc.close();