PrintStream(标准字节输出流)
一、特点
- 使用OutputStream输出数据,需要将数据变为字节数组输出,使用起来不方便,为了解决使用OutputStream输出数据的不足,Java提供了一套专门输出数据的类PrintStream(标准字节输出流)和PrintWriter(标准字节输入流),这种设计模式,在Java中叫装饰模式,相当于将一个功能不足的操作类,通过某些类的包装,形成更好用的工具类
- 只负责数据的输出,不负责数据的读取,默认输出到控制台
- PrintStream不会抛出IOException异常,不需要手动关闭流
- PrintStream在OutputStream的基础上添加了print()/println()方法,可以打印各种数据类型
void print(任意类型的值)
void println(任意类型的值并换行)
- 如果使用集成父类的write方法写数据,那么查看数据的时候会查询编码表 97->a
如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97->97
- PrintStream最终输出的总是byte数据
二、PrintStream执行原理
- 对于PrintStream,所有println方法都在内部调用相应的print方法,比如println(charx)的方法体就是调用print(x),再写入一个平台相关的换行符,PrintStream构建时会在内部new一个BufferedWriter,所有print方法都在内部调用这个Writer的write方法(write(String)或write(char[]))——对于print(char[]),直接调用write(char[]),对于其他的print方法,先用String.valueOf获得参数的字符串表示,然后调用write(String)
- PrintStream是字节流,有处理raw byte的方法,write(int)和write(byte[],int,int);PrintWriter是字符流,它没有处理raw byte的方法
- PrintStream 的autoflushing机制:在输出byte数组、调用println方法、输出换行符或者byte值10(即\n)时自动调用flush方法
三、测试用例
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamTest {
public static void main(String[] args