Java之打印流分析

打印流:是输出流 ==》只有2个(PrintStream和PrintWriter),只有输出,没有输入

在这里插入图片描述

PrintStream:字节打印流

1、打印输出流也是一种处理流(FilterOutputStream),用来装饰其它输出流
2、PrintStream 永远不会抛出 IOException;它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,从而查看PrintStream内部是否产生了IOException。
3、另外,PrintStream 提供了自动flush 和 字符集设置功能。所谓自动flush,就是往PrintStream写入的数据会立刻调用flush()函数。

PrintWriter:字符打印流

1、PrintWriter 是字符类型的打印输出流,它继承于Writer。
2、PrintWriter 用于向文本输出流打印对象的格式化表示形式。它实现了PrintStream 的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入

代码示例:

public class 打印流 {
    public static void main(String[] args) {
        try {
            PrintStream printStream=new PrintStream("F:\\java\\打印流.txt");
            printStream.print("123");
            printStream.checkError();
            printStream.println("456");
            printStream.println(789);
            printStream.append("wewew");
            printStream.append("123456",1,4);
             printStream.close();
//            PrintWriter printWriter=new PrintWriter("F:\\java\\打印流.txt");
//            printWriter.append("tulun");
//            printWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

运行结果:
在这里插入图片描述

PrintStream源码分析:

构造器:

public class PrintStream extends FilterOutputStream implements Appendable, Closeable{

    private final boolean autoFlush;
    private BufferedWriter textOut;
    private OutputStreamWriter charOut;

    // 入参为 OutputStream 
    public PrintStream(OutputStream out)
    public PrintStream(OutputStream out, boolean autoFlush)
    public PrintStream(OutputStream out, boolean autoFlush, String encoding) 
    // 入参为 文件 或 文件名
    public PrintStream(String fileName)
    public PrintStream(String fileName, String csn)
    public PrintStream(File file)
    public PrintStream(File file, String csn)

    //构造之后会初始化,
    // this.charOut = new OutputStreamWriter(out);
    // this.textOut = new BufferedWriter(charOut);
}

核心方法:

    public void write(int b)
    public void write(byte buf[], int off, int len)

    // print()系列方法,实际调用private void write(String s)
    public void print(boolean b)
    public void print(char c)
    public void print(int i)
    public void print(long l)
    public void print(float f)
    public void print(double d)
    ...

    private void write(String s) {
        try {
            synchronized (this) {
                ensureOpen();
                //用的是BufferedWriter的write方法
                textOut.write(s);
                textOut.flushBuffer();
                charOut.flushBuffer();
                if (autoFlush && (s.indexOf('\n') >= 0))
                    out.flush();
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }
    
    // println()系列方法,实际调用print()+newLine()
    public void println() {
        newLine();
    }

    public void println(boolean x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    // 实际调用 format(format, args);
    public PrintStream printf(String format, Object ... args)
    // 实际调用 format(l, format, args);
    public PrintStream printf(Locale l, String format, Object ... args) 
    ...
    
    // append()系列方法,实际调用print()方法
    public PrintStream append(CharSequence csq)
    public PrintStream append(CharSequence csq, int start, int end)
    public PrintStream append(char c)

PrintWriter源码分析:

构造器:

public class PrintWriter extends Writer {

    private final boolean autoFlush;
    private BufferedWriter textOut;
    private OutputStreamWriter charOut;

    //无论什么入参都会转换为BufferedWriter
    // 入参为 OutputStream
    public PrintWriter(OutputStream out)
    public PrintWriter(OutputStream out, boolean autoFlush)

    // 入参为 Writer 
    public PrintWriter (Writer out)
    public PrintWriter(Writer out,boolean autoFlush)

    // 入参为 文件 或 文件名
    public PrintStream(String fileName)
    public PrintStream(String fileName, String csn)
    public PrintStream(File file)
    public PrintStream(File file, String csn)
}

核心方法:

    public void write(int b)
    public void write(char buf[], int off, int len)
    public void write(char buf[])
    public void write(String s, int off, int len)
    public void write(String s)

    // print()系列方法,实际调用 public void write(String s, int off, int len)
    public void print(boolean b)
    public void print(char c)
    public void print(int i)
    public void print(long l)
    public void print(float f)
    public void print(double d)
    ...

    // println()系列方法,实际调用print()+newLine()
    public void println() {
        newLine();
    }

    public void println(boolean x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    // 实际调用 format(format, args);
    public PrintStream printf(String format, Object ... args)
    // 实际调用 format(l, format, args);
    public PrintStream printf(Locale l, String format, Object ... args) 
    ...
    
    // append()系列方法,实际调用print()方法
    public PrintStream append(CharSequence csq)
    public PrintStream append(CharSequence csq, int start, int end)
    public PrintStream append(char c)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值