Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)

转换流

InputStreamReaderOutputStreamWriter 是 Java 中用于字符流和字节流之间进行转换的转换流类。它们主要用于解决字符编码的问题,在字节流和字符流之间提供了桥梁,可以将字节流转换为字符流或将字符流转换为字节流。

  1. 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();
         }
     }
    
  2. 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 中,PrintStreamPrintWriter 是用于输出文本数据的类,它们提供了方便的方法来打印数据到不同类型的输出流。这两个类都实现了 Appendable 接口,允许你将各种数据类型转换为字符串并输出到流中。

  1. PrintStream
    PrintStream 是字节流的打印类,通常用于将文本数据输出到文件或控制台。它提供了多种 printprintln 方法,可以将各种数据类型打印为字符串并输出。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");
    }
}
  1. PrintWriter
    PrintWriter 是字符流的打印类,用于将文本数据输出到文件或其他字符流。与 PrintStream 类似,它也提供了多种 printprintln 方法,用于打印各种数据类型。
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关系图:
Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)_第1张图片

printWriter关系图
Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)_第2张图片

你可能感兴趣的:(java,开发语言)