之前在复习IO的时候,为了方便记忆,提到了以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。
除了在使用上的不一样,那究竟两者有什么区别呢。直接给出结论:字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
测试方法:使用OutputStream和Writer分别对文本文件做写入,但是并不关闭、不刷新(flush)输出流,执行后看是否能成功写入。
OutputStream
package com.leolee.eurekaclient.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Tests {
public static void main(String[] args) throws IOException {
final String text = "Hello";
File file = new File("C:" + File.separator + "Users" + File.separator + "LeoLee" + File.separator + "Desktop" + File.separator + "test.txt");
OutputStream outputStream = null;
outputStream = new FileOutputStream(file);
//将文本写入文件,但是并不关闭OutputStream
outputStream.write(text.getBytes());
}
}
执行结果如下:
Writer
package com.leolee.eurekaclient.test;
import java.io.*;
public class Tests {
public static void main(String[] args) throws IOException {
final String text = "Hello";
File file = new File("C:" + File.separator + "Users" + File.separator + "LeoLee" + File.separator + "Desktop" + File.separator + "test.txt");
//将文本写入文件,但是并不关闭OutputStream
Writer out = null;
out = new FileWriter(file);
out.write(text);
}
}
执行结果如下:
结果表明,字节流是直接操作了文件,字符流是操作了缓冲区。
在开发过程中,字节流往往比字符流使用更广泛,原因也很简单,计算机本身数据的传输即使以字节为单位的,图片、视频等非文本文件也只能用字节流做处理。字符流只是方便了文本数据的读写,通过字符集的转化来实现的。