转换流
InputStreamReader
和 OutputStreamWriter
是 Java 中用于字符流和字节流之间进行转换的转换流类。它们主要用于解决字符编码的问题,在字节流和字符流之间提供了桥梁,可以将字节流转换为字符流或将字符流转换为字节流。
-
InputStreamReader:
InputStreamReader
是字节流到字符流的桥梁,它将字节输入流转换为字符输入流。它接受一个字节输入流作为构造参数,并指定字符编码(如UTF-8、GBK等)。通过读取字节并根据指定的编码转换为字符,可以使用read()
方法来读取字符。public class InputStreamReader_ {public static void main(String[] args) throws IOException {String filePath = "d:\\InputStreamReader.txt";//解读//1. 把 FileInputStream 转成 InputStreamReader//2. 指定编码 gbk//InputStreamReader isr = new InputStreamReader(new FileInputStream(filePath), "gbk");//3. 把 InputStreamReader 传入 BufferedReader//BufferedReader br = new BufferedReader(isr);//将 2 和 3 合在一起BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "utf-8"));//4. 读取String s = br.readLine();System.out.println("读取内容=" + s);//5. 关闭外层流br.close();}}
-
OutputStreamWriter:
OutputStreamWriter
是字符流到字节流的桥梁,它将字符输出流转换为字节输出流。它接受一个字节输出流作为构造参数,并指定字符编码。通过将字符按照指定的编码转换为字节,并使用write()
方法来写入字节。public class OutputStreamWriter_ {public static void main(String[] args) throws IOException {// 1.创建流对象OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("d:\\OutputStreamWriter.txt"), "utf-8");// 2.写入osw.write("hello,世界");// 3.关闭osw.close();System.out.println("保存成功~");}}
这些转换流对于处理不同字符编码的数据非常有用,可以确保在读写过程中正确地将字节转换为字符,或者将字符转换为字节,避免了字符编码引起的问题。
打印流
在 Java 中,PrintStream
和 PrintWriter
是用于输出文本数据的类,它们提供了方便的方法来打印数据到不同类型的输出流。这两个类都实现了 Appendable
接口,允许你将各种数据类型转换为字符串并输出到流中。
- PrintStream:
PrintStream
是字节流的打印类,通常用于将文本数据输出到文件或控制台。它提供了多种print
和println
方法,可以将各种数据类型打印为字符串并输出。System.out
就是一个PrintStream
对象,用于控制台输出。
public class PrintStream_ {public static void main(String[] args) throws IOException {PrintStream out = System.out;//在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器/*public void print(String s) {if (s == null) {s = "null";}write(s);}*/out.print("john, hello");//因为 print 底层使用的是 write , 所以我们可以直接调用 write 进行打印/输出out.write("你好,世界".getBytes());out.close();//我们可以去修改打印流输出的位置/设备//1. 输出修改成到 "e:\\f1.txt"//2. "hello, 韩顺平教育~" 就会输出到 e:\f1.txt//3. public static void setOut(PrintStream out) {// checkIO();// setOut0(out); // native 方法,修改了 out// }System.setOut(new PrintStream("d:\\printStream.txt"));System.out.println("hello,world");}
}
- PrintWriter:
PrintWriter
是字符流的打印类,用于将文本数据输出到文件或其他字符流。与PrintStream
类似,它也提供了多种print
和println
方法,用于打印各种数据类型。
public class printWriter {public static void main(String[] args) throws IOException {//PrintWriter printWriter = new PrintWriter(System.out);//默认是显示器PrintWriter printWriter = new PrintWriter(new FileWriter("d:\\printWriter.txt"));printWriter.print("hi, 北京你好~~~~");printWriter.close();//flush + 关闭流, 才会将数据写入到文件..}
}
这两个类提供了一种方便的方式来输出数据,尤其适用于格式化输出文本数据。选择使用哪个类取决于你要输出的数据类型(字节流或字符流),以及你的具体需求。如果需要将数据写入二进制文件,通常会使用 PrintStream
。如果需要输出文本文件,特别是需要进行字符编码操作,通常会使用 PrintWriter
。
printStream关系图:
printWriter关系图