Java字节流与字符流区别

Java字节流与字符流区别教程

我们在 Java 字节流 教程和 Java 字符流 教程中看到它们都能够对文件进行写入和读取,那么两个类对文件操作有什么不同的地方呢?

实际上字节流在对文件操作的时候,不会用到缓冲区(内存),对文件本身直接操作而字符流在对文件操作的时候用到了缓冲区,通过缓冲区来对文件进行操作。

08 字节流和字符流区别.png

Java字节流和字符流区别

案例

package com.haicoder.net.stream; import java.io.*; public class ByteAndCharStream { public static void main(String[] args) throws Exception { System.out.println("嗨客网(www.haicoder.net)"); String appendInfo = "嗨客网,你好啊!\r\n"; //\r\n 在追加文件的时候,表示换行 System.out.println("===========字节流不关闭输出流=============="); File file = new File("/Users/haicoder/Documents/code/hai/outputstream.txt"); //如果文件不存在,会自动创建 OutputStream outputStream = new FileOutputStream(file, true); //true 表示可以在文件中追加内容 false 表示不能追加 byte b[] = appendInfo.getBytes(); outputStream.write(b); //调用 write(byte b[]) 方法 //outputStream.close(); 将流关闭 System.out.println("=====字符流不关闭输出流======="); File file1 = new File("/Users/haicoder/Documents/code/hai/writer.txt"); //如果文件不存在,会自动创建 Writer writer = new FileWriter(file1); writer.write(appendInfo); //文件没有,创建并写入 writer.write(appendInfo); //追加文件内容 //writer.close(); 将流关闭 } }

运行结果如下

09 字节流和字符流不关闭运行结果.png

生成的文件和内容如下

10 字节流和字符流不关闭.png

我们看到,outputStream 没有关闭,但是文件里面会将内容写入,writer 没有 close,对应的文件里面没有数据,字节流是对文件直接操作的,所以文件里面将内容写进去了,而字符流是面向缓冲区的,在关闭文件的时候会将缓冲区里面的内容写入文件中,或者调用 flush 方法,将缓冲区里面的内容强制刷到文件里面。

在某些情况下,需要对文件资源进行频繁的操作,在这样的情况下性能就会比较低,这个时候为了提升性能,可以将一部分的数据暂时存放在缓冲区里面,后面再操作数据的时候,直接从缓冲区里面获取,这样会提升性能。

Java字节流与字符流区别总结

字节流是直接对文件操作的,字符流是面向缓冲区的,在平时开发过程中,建议使用字节流。因为文件在硬盘或者传输的时候,都是以字节的方式进行的,字符只会在内存中才会形成。