在 Java 中操作文件的方法本质上只有两种:字符流和字节流,而字节流和字符流的实现类又有很多,因此在文件写入时我们就可以选择各种各样的类来实现。我们本文就来盘点一下这些方法,顺便测试一下它们性能,以便为我们选出最优的写入方法。
在正式开始之前,我们先来了解几个基本的概念:流、字节流和字符流的定义与区别。
0.什么是流?
Java 中的“流”是一种抽象的概念,也是一种比喻,就好比水流一样,水流是从一端流向另一端的,而在 Java 中的“水流”就是数据,数据会从一端“流向”另一端。
根据流的方向性,我们可以将流分为输入流和输出流,当程序需要从数据源中读入数据的时候就会开启一个输入流,相反,写出数据到某个数据源目的地的时候也会开启一个输出流,数据源可以是文件、内存或者网络等。
1.什么是字节流?
字节流的基本单位为字节(Byte),一个字节通常为 8 位,它是用来处理二进制(数据)的。字节流有两个基类:InputStream
(输入字节流)和 OutputStream
(输出字节流)。
常用字节流的继承关系图如下图所示:
其中 InputStream
用于读操作,而 OutputStream
用于写操作。
2.什么是字符流?
字符流的基本单位为 Unicode,大小为两个字节(Byte),它通常用来处理文本数据。字符流的两个基类:Reader
(输入字符流)和 Writer
(输出字符流)。
常用字符流的继承关系图如下图所示: