【Java教程】Day10-10 IO:PrintStream 和 PrintWriter

在 Java 中,PrintStream 和 PrintWriter 是常见的输出流类,用于将数据输出到不同的目标。它们在功能上有很多相似之处,但也有一些关键的区别。本文将深入探讨这两个类的特点、用途以及它们之间的差异。

 

 

1. PrintStream:增强的字节输出流

PrintStream 是 FilterOutputStream 的一个子类,它扩展了 OutputStream 接口,提供了额外的方法来写入不同类型的数据。与 OutputStream 只能写入字节不同,PrintStream 通过 print() 和 println() 方法支持输出各种基本数据类型、字符串和对象。

1.1 PrintStream 的特点

a. 输出不同数据类型:
PrintStream 提供了多种 print() 和 println() 方法,可以分别输出 intbooleanStringObject 等数据类型。例如:

javaprint(123);           // 输出数字 123print(true);          // 输出 boolean 值 trueprint("Hello");       // 输出字符串 "Hello"print(new Object());  // 输出对象的字符串表示,类似 "java.lang.Object@3c7a835a"

 

b. 自动换行:
println() 方法会自动在输出的内容后加上换行符。这个方法对于格式化输出非常方便。

javaprintln("Hello"); // 输出 "Hello" 并换行

 

c. 与 System.out 结合使用:
System.out 是 Java 中的标准输出流,实际上是一个默认的 PrintStream 对象。我们可以通过 System.out 使用 print() 和 println() 方法来输出数据。

javaSystem.out.print("Hello");  // 输出 "Hello"System.out.println("World"); // 输出 "World" 并换行

d. 不抛出 IOException
与 OutputStream 相比,PrintStream 最大的优势之一是,它不会抛出 IOException。这意味着我们可以避免在代码中显式捕获或处理 IOException 异常,这在某些场景下显得非常方便。

 

1.2 System.err 与 System.out

除了标准输出 System.out,Java 还提供了一个标准错误流 System.err,它也是一个 PrintStream 对象。System.err 用于输出错误信息,通常在控制台显示红色错误信息。示例如下:

javaSystem.err.println("This is an error message."); // 输出错误信息

 

2. PrintWriter:增强的字符输出流

PrintWriter 是基于 Writer 的输出流类,它的功能和 PrintStream 十分相似,但其输出的数据是字符数据,而不是字节数据。与 PrintStream 相比,PrintWriter 主要用于处理字符流的输出。

2.1 PrintWriter 的特点

  • 字符输出:
    与 PrintStream 写入字节不同,PrintWriter 写入的是字符数据。通过 print() 和 println() 方法,我们可以输出字符、字符数组、字符串等。

  • 自动刷新:
    PrintWriter 提供了自动刷新功能。如果我们在创建 PrintWriter 时指定 autoFlush=true,那么每次调用 println() 或 printf() 方法时,数据会自动刷新到目标输出流。

  • 不会抛出 IOException
    与 PrintStream 类似,PrintWriter 也不会抛出 IOException。这使得它在一些不需要显式处理异常的情况下非常方便。

2.2 使用 PrintWriter

PrintWriter 可以通过多种方式创建,可以将输出流与 StringWriterFileWriter 等结合使用。以下是一个示例,展示了如何使用 PrintWriter 输出各种类型的数据:

javaimport java.io.*;public class Main {    public static void main(String[] args) {        StringWriter buffer = new StringWriter();        try (PrintWriter pw = new PrintWriter(buffer)) {            pw.println("Hello");            pw.println(12345);            pw.println(true);        }        System.out.println(buffer.toString());    }}

 

在这个例子中,PrintWriter 将不同的数据类型(字符串、数字、布尔值)写入 StringWriter 中,然后通过 toString() 方法输出。输出结果为:

arduinoHello12345true

 

3. PrintStream 和 PrintWriter 的对比

特点PrintStreamPrintWriter
继承自FilterOutputStreamWriter
输出数据类型字节数据(byte字符数据(char
主要方法print() 和 println()print() 和 println()
异常处理不会抛出 IOException不会抛出 IOException
自动换行println() 方法会加上换行符println() 方法会加上换行符
常用对象System.outSystem.err可与 FileWriterStringWriter 等结合使用
适用场景处理字节流输出处理字符流输出

 

4. 小结

  • PrintStream 主要用于字节流输出,它提供了 print() 和 println() 方法,可以输出各种数据类型。System.out 和 System.err 是默认的 PrintStream 实例,分别用于标准输出和标准错误输出。

  • PrintWriter 则是处理字符流输出的类,它也提供了 print() 和 println() 方法,但输出的是字符数据。PrintWriter 也有自动刷新的功能,适用于字符数据的输出。

  • 两者最大的区别在于处理的数据类型,PrintStream 处理字节数据,而 PrintWriter 处理字符数据。

 

在实际应用中,选择 PrintStream 或 PrintWriter 取决于你的数据类型(字节或字符)以及输出的需求。如果你需要处理字符数据并希望避免异常,可以优先选择 PrintWriter。如果是处理字节数据,PrintStream 则更为合适。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值