之前在复习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);//将文本写入文件,但是并不关闭OutputStreamoutputStream.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");//将文本写入文件,但是并不关闭OutputStreamWriter out = null;out = new FileWriter(file);out.write(text);}
}
执行结果如下:
结果表明,字节流是直接操作了文件,字符流是操作了缓冲区。
在开发过程中,字节流往往比字符流使用更广泛,原因也很简单,计算机本身数据的传输即使以字节为单位的,图片、视频等非文本文件也只能用字节流做处理。字符流只是方便了文本数据的读写,通过字符集的转化来实现的。