Java打印流

打印流

打印流属于整个Java开发过程中重要的组成概念
现在已经清楚了InputStream和OutputStream两个类的基本使用,如果要进行输出,只能够使用OutputStream类来完成,但是这个类的使用输出是否方便?
如果要用OutputStream输出数据,假设要输出的是String,需要将String变为字节数组后再输出,如果输出的是int需要将int变为字符串在变成字节数组输出,如果是boolean或double呢?
既然OutputStream类有缺陷,我们就希望自己可以创建一个类,这个类支持各种数据类型的输出。

打印流的实现原理

为了解决输出数据时的功能不足,所以在java.io包里面又提供给了一套专门的用于输出数据的类:PrintStream PrintWriter;
以PrintStream类为例,观察一下继承结构和构造方法:
在这里插入图片描述
在这里插入图片描述

public PrintStream(OutputStream out)

类似代理的设计,但是不是
在PrintStream类里面提供有一系列的print(),println()方法,这些方法支持各种数据的输出,也就是说如果使用了PrintStream就不会去使用write方法了
但是整个操作过程之中,虽然操作形式不同了,但是本质还是基于OutputStream类的方法完成的。那么这样的设计在我们的java之中称为装饰设计模式。相当于将一个功能不足的操作类,通过某些类的包装,形成更好用的工具类。

class PrintUtil{
    private OutputStream output;
    public PrintUtil(OutputStream output)
    {
        this.output=output;
    }
    //利用String类的输出,进行重载
    public void print(int x){
        this.print(String.valueOf(x));
    }
    public void print(double x){
            this.print(String.valueOf(x));
    }
    public void print(String str){
        try
        {this.output.write(str.getBytes());}
        catch(IOException e){
            e.getStackTrace();
        }
    }
    public void println(int x ){
             this.println(String.valueOf(x));
    }
    public void println(double x){
            this.println(String.valueOf(x));
    }
    public void println(String str){
          this.print(str.concat("\n"));
    }
}

public class Main {

    public static void main(String[] args) throws Exception {//正常工作一定要通过try catch处理
      PrintUtil pu = new PrintUtil(new FileOutputStream("/users/hong/hongs/firsttext.txt"));
      pu.println(2);
      pu.println(3);
      pu.print("hello world");
    }
}

在以后的开发过程之中,只要是程序输出内容,都会采用打印流的模式完成,但是请千万切记打印流依然需要OutputStream类的支持。

打印流操作类的使用

JDK1.5的改进,所有的输出数据都要求使用打印流完成,在JDK1.5之后考虑到市场因素,增加了一种输出叫做格式化输出

public PrintStream printf(Locale l, String format,Object... args);

如果要格式化输出就需要一些标记:整数:%d,字符串:%s,小数%m.nf
在开发过程中几乎用不到此类输出,此类输出只是作为使用特色而已。
在JDK1.5之后,String类也发生了一个变化,定义了一个新功能:格式化字符串

  • 方法:
public static String format(Locale l, String format,Object... args);
public static String format(String format,Object... args);

日后如果进行程序输出数据的话,绝对要使用打印流


版权声明:本文为weixin_43633784原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。