[IO] JavaIO之PrintStream(十五)

编程语言 编程语言 1715 人阅读 | 0 人回复

功能简介

PrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式 装饰器模式中具体的装饰类 它提供的功能就是便捷的打印各种数据形式 FilterInputStream为装饰器模式中的抽象角色 简言之,PrintStream可以快捷的打印输出各种类型的数据

image.png

关键字段

autoFlush是否自动刷新的标志位 所谓自动刷新,就是每次调用方法后,看下标志位,如果设置了,那么调用一下out.flush() 比如下面这段代码

image.png

所以,为了自动刷新,可以创建一个 PrintStream 这个autoFlush 会在: 写入byte数组之后,println调用,写入一个换行符,或者写入一个 '\n'

这几种场景下自动刷新(如果是true)

构造方法

先看下他的私有的构造方法 其他所有的方法都是调用这两个构造方法

image.png

两个私有构造方法, 关注的主要信息就是OutputStream和autoFlush和 charset三个字段 OutputStream 作为实际被装饰的实体类 charset 指定的字符编码,如果不指定,那么将会使用默认的

autoFlush 默认是false

//直接传递OutputStream
PrintStream(OutputStream)
PrintStream(OutputStream, boolean)
PrintStream(OutputStream, boolean, String)


//通过File或者路径名 构造FileOutputStream  作为FileOutputStream
PrintStream(String)
PrintStream(String, String)
PrintStream(File)
PrintStream(File, String)

文件相关的,autoFlush全部都是false

PrintStream 永远不会抛出 IOException 通过代码可以看得出来 内部维护了一个trouble标志位 发生了IOException异常时,捕捉后转换为trouble=true 可以通过checkError()方法进行返回

image.png

主要方法介绍

write

write(int)
write(byte[], int, int)

代码上面一段也已经贴出来 增加了自动刷新的功能,并且还不会抛出异常

print系列

方法 说明
println() 通过写入行分隔符字符串终止当前行。行分隔符字符串由系统属性 line.separator 定义,不一定是单个换行符 ('\n')
方法 说明
print(boolean) String.valueOf(boolean)生成字符串转换为字节 ,<br />以 write(int) 方法的方式写入这些字节 +println() = println(boolean)
print(char) 字符转换为一个或多个字节以 write(int) 方法的方式写入这些字节 +println() = println(char)
print(int) String.valueOf(int)生成字符串转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(int)
print(long) String.valueOf(long)生成字符串转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(long)
print(float) String.valueOf(float)生成字符串转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(float)
print(double) String.valueOf(double)生成字符串转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(double)
print(char[]) 字符转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(char[])
print(String) 如果参数为 null,则打印字符串 "null"否则转换为字节以 write(int) 方法的方式写入这些字节 +println() = println(String)
print(Object) String.valueOf(Object)生成字符串转换为字节以 write(int) 方法的方式写入这些字节 不存在print(Object) +println()的情况,println(Object)==先调用 String.valueOf(x) 获取字符串值,然后再 print(String)+ println()

print将会把数据转换为他们的字符串形式,然后转换为字节,然后在将字节写入

print 与println结合 可以变成println的形式 从代码也可以很直白的看出来,调用之后,然后newLine() 不过需要注意的是print(Object) 他是特例

image.png

printf(String, Object...)
printf(Locale, String, Object...)
format(String, Object...)
format(Locale, String, Object...)

image.png

产生格式化输出的每个方法都需要格式字符串 和参数列表 格式字符串是一个 String,它可以包含固定文本以及一个或多个嵌入的格式说明符 这个是个类似C语言printf的方法 使用的时候不熟悉直接查表对照即可 printf和format一回事

方法 说明
append(char) 将指定字符添加到此输出流。<br />调用此方法的 out.append(c) 形式,行为与以下调用完全相同:out.print(c)最后加一个跟写一个显然没什么不同
append(CharSequence) 将指定字符序列添加到此输出流
append(CharSequence, int, int) 将指定字符序列的子序列添加到此输出流

flush()

close()

common_log.png 转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-151-1-1.html

关注下面的标签,发现更多相似文章

文章被以下专栏收录:

    黄小斜学Java

    疯狂的字节X

  • 目前专注于分享Java领域干货,公众号同步更新。原创以及收集整理,把最好的留下。
    包括但不限于JVM、计算机科学、算法、数据库、分布式、Spring全家桶、微服务、高并发、Docker容器、ELK、大数据等相关知识,一起进步,一起成长。
热门推荐
[若依]微服务springcloud版新建增添加一个
[md]若依框架是一个比较出名的后台管理系统,有多个不同版本。
[CXX1300] CMake '3.18.1' was not
[md][CXX1300] CMake '3.18.1' was not found in SDK, PATH, or
海康摄像头接入 wvp-GB28181-pro平台测试验
[md]### 简介 开箱即用的28181协议视频平台 `https://github.c