Java 中的字节流和字符流类有什么区别?
java 8object oriented programmingprogramming
Java 提供 I/O 流来读取和写入数据,其中流表示输入源或输出目标,可以是文件、I/O 设备、其他程序等。
根据它们处理的数据,有两种类型的流 −
- 字节流 − 它们以字节(8 位)处理数据,即字节流类读取/写入 8 位数据。使用这些,您可以存储字符、视频、音频、图像等。
- 字符流 − 它们以 16 位 Unicode 处理数据。使用这些,您只能读取和写入文本数据。
Reader 和 Writer 类(抽象)是所有字符流类的超类:用于读取/写入字符流的类。
而 InputStream 和 OutputStream 类(抽象)是所有输入/输出流类的超类:用于读取/写入字节流的类。
下图说明了 Java 中的所有输入和输出流(类)。
输入/输出流与读取器/写入器之间的区别
它们之间的主要区别在于输入/输出流类读取/写入字节流数据。而 Reader/Writer 类处理字符。
输入/输出流类的方法接受字节数组作为参数,而 Reader/Writer 类接受字符数组作为参数。
Reader/Writer 类处理所有 Unicode 字符,便于内部化,比输入/输出流效率更高。
因此,除非您处理二进制数据(如图像),否则建议使用 Reader/Writer 类。
输入/输出流示例
以下 Java 程序使用 FileInputStream 从特定文件读取数据,并使用 FileOutputStream 将其写入另一个文件。
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class IOStreamsExample { public static void main(String args[]) throws IOException { //创建 FileInputStream 对象 File file = new File("D:/myFile.txt"); FileInputStream fis = new FileInputStream(file); byte bytes[] = new byte[(int) file.length()]; //从文件读取数据 fis.read(bytes); //将数据写入另一个文件 File out = new File("D:/CopyOfmyFile.txt"); FileOutputStream outputStream = new FileOutputStream(out); //将数据写入文件 outputStream.write(bytes); outputStream.flush(); System.out.println("数据成功写入指定文件"); } }
输出
数据已成功写入指定文件
示例读取器/写入器流
以下 Java 程序使用 FileReader 从特定文件读取数据,并使用 FileWriter 将其写入另一个文件。
import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class IOStreamsExample { public static void main(String args[]) throws IOException { //创建 FileReader 对象 File file = new File("D:/myFile.txt"); FileReader reader = new FileReader(file); char chars[] = new char[(int) file.length()]; //从文件读取数据 reader.read(chars); //将数据写入另一个文件 File out = new File("D:/CopyOfmyFile.txt"); FileWriter writer = new FileWriter(out); //将数据写入文件 writer.write(chars); writer.flush(); System.out.println("数据成功写入指定文件"); } }
输出
数据成功写入指定文件