功能简介
 PrintWriter   向文本输出流打印对象的格式化表示形式 
 他与PrintStream的逻辑上功能目的是相同的–他们都想做同一件事情–更便捷的格式化打印输出 
| PrintWriter实现了PrintStream 中的所有 print 方法,除了那些用于写入原始字节的方法,对于那些字节,程序应该使用未编码的字节流进行写入 | 
| 
      PrintStream会在换行符时自动调用自动刷新 
      
      PrintWriter在这一点上与PrintWriter不同, 
      
      只有在调用 println、printf 或 format 的其中一个方法时才可能完成此操作 
      | 
| 类似,PrintStream 此类中的方法不会抛出 I/O 异常,可以通过 checkError() 检查是否出现错误 | 
| PrintWriter也是装饰器模式 只不过看起来没那么典型而已 他直接继承Writer 省略了抽象装饰器角色Decorator PrintWriter 既充当了Decorator也是一个ConcreteDecorator 它内部包含了一个Writer out | 
|   | 
构造方法
 他内部有一个Writer out ,而且刚才我们已经说了他是装饰器模式 
 所以他必然会需要一个out,你从构造方法的实际情况也可以看得出来 
| 
      构造方法主要内容包括下面三部分: 
      
          1. 首先需要一个Writer 
      
          2. 自动刷新的标志 
      
          3. 字符编码的设置 
      | 
| 
          对于一个Writer 
      
          1. 他要么就是一个直接的Writer 
      
          2. 要么是一个new OutputStreamWriter( OutputStream) 把OutputStream转换为Writer 
      
          3. 另外,通过File或者String路径名,也可以构造FileOutputStream  ,他就是一个OutputStream,也就是下面的形式: 
      
              new OutputStreamWriter( new FileOutputStream(File/String路径) )    
      | 
| 自动刷新,如果不传递,默认false 编码如果不设置,那么是系统默认 | 
Write方法
print(xxx) /println(xxx)
| 可以看得出来  print系列都是调用的write方法 而且,基本上是write(String s)方法 boolean 会翻译成 字符串 true 或者false,然后调用write String 如果是null 翻译成字符串 null 然后调用write 除了Object略微特殊以外,其他所有的print 和 println结合之后可以产生对应的println(xxx)的形式 | 
append
| 三个版本的append方法 
           append(char) 
       
           append(java.lang.CharSequence) 
       
           append(java.lang.CharSequence, int, int) 
       
       内部全部都是依赖于write方法 
       | 
|   | 
printf 与 format
总结
 PrintWriter 构造方法很多,提供出来的方法也很多,看起来让人眼花缭乱 
 其实他就是一个装饰工具类,底层逻辑也很简单 
 既然是工具性质的 
 1. 自然需要有足够便捷的构造形式,你看那么多构造方法,最终不过也就是一种形式的构造方法 
 2. 自然有能够有多变的输出形式才能够说是便捷的输出打印嘛 
 对于Writer家族的一些基本操作,基本上是沿用了Write 
 所谓的增加的便捷亮点各种print和println 
 也就只是使用Writer本身的write方法打印输出他们的字符 形式 
 转换为字符的规则为: 
| 基本数据类型和Object 会使用String.valueOf进行转换 | 
| 字符 字符数组 String本身就是字符/字符串的形式 | 
 另外的一个亮点是printf 同PrintStream中的是一样的,想要弄清楚重点在于弄清楚 Formatter了 
 上面说了,他既然是装饰工具流,所以说他必然要依赖于其他的输出流 
 PrintWriter就是依赖Writer,他就是来给这个Writer增加更便捷的打印输出功能的 
 既然着重点在于格式化输出数据,那么他的关注点自然在于数据的形式,而不是在于怎么写,所以write方法都几乎不动使用的还是原来的 
 然后在实际的调用各种print方法的时候,在对方法的入参进行转换,换成了字符的形式而已
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15596.html
