转换流
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关系图