likes
comments
collection
share

Java中PrintStream 用法

作者站长头像
站长
· 阅读数 9

文章目录

介绍

PrintStream 是打印输出流,它继承于 FilterOutputStream。 PrintStream 是用来装饰其它输出流。它能为其他输出流添加功能,使它们能够方便地打印各种数据值表示形式。 与其他输出流不同,PrintStream 永远不会抛出 IOException;它产生的 IOException 会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError()返回错误标记,从而查看 PrintStream 内部是否产生了 IOException。 另外,PrintStream 提供了自动 flush 和 字符集设置功能。所谓自动 flush,就是往 PrintStream 写入的数据会立刻调用flush()函数。

创建对象

1、将 输出流out作为 PrintStream 的输出流,不会自动 flush,并且采用默认字符集。所谓 自动flush,就是每次执行print()println()write()函数,都会调用flush()函数;而 不自动flush,则需要我们手动调用flush()接口。

PrintStream out = new PrintStream(OutputStream out);

2、创建 file 对应的 FileOutputStream,然后将该 FileOutputStream 作为 PrintStream 的输出流。不自动flush,采用默认字符集。

PrintStream out = new PrintStream(File file);

3、创建 fileName 对应的 FileOutputStream,然后将该 FileOutputStream 作为 PrintStream 的输出流,不自动 flush,采用 charsetName 字符集。

PrintStream out = new PrintStream(String fileName, String charsetName);

方法

1、将数据 b 写入到 PrintStream 输出流中。b 虽然是 int 类型,但实际只会写入一个字节,即输出末尾字节

write(int b)

2、将字节数组 buff 全部写入到输出流中

write(byte[] buff)

3、将 buffer 中从 from 开始的 length 个字节写入到 PrintStream 输出流中

write(byte[] buff,int from,int length)

4、将对象 o 对应的字符串写入到 PrintStream 输出流中,print 实际调用的是 write函数

print(Object o)

5、将 换行符 写入到 PrintStream 输出流 中,println 实际调用的是 write 函数。

println()

print()

注意: print()println()都是将其中参数转换成字符串之后,再写入到输入流。

例如:

print(0x61);

等价于

write(String.valueOf(0x61));

所以我们运行 print(0x61);后会在文件中输出 97。如果我们使用例如 EditPlus 编辑器查看,一般默认都是十进制的。所以我们需要将 0x61 按照十进制方式展示。(和运行 print(97);结果是相同的) Java中PrintStream 用法 我们改用 十六进制查看改文件,我们会看到 39 37 Java中PrintStream 用法

对此来解释一下: 每个字符都对应着一个整数编码,例如 a 的整数编码是 97,b 是 98,中文的 “中” 是20013,具体可以查看 ASCII码对照表。下面我列出了我们要用到的:

二进制十进制十六进制图形
0000 0000000
0000 0001101
0000 0010202
..................
0000 0111707
0000 1000808
0000 1001909
0000 1010100A
..................
0011 000048300
0011 000149311
........................
0011 011155377
0011 100056388
0011 100157399
0110 00009660`
0110 00019761a
0110 00109862b
0110 00119963c
........................
0111 100012078x
0111 100112179y
0111 10101227Az
0111 10111237B{
0111 11001247C|
........................
100111000101101200134e2d

要区分字符 9 和整数编码 9。看图形这一列的 9 就是字符 9。它的十六进制是 39。 字符 7 的十六进制是37。

所以 out.write(97); 会拆分成97,所以会输出39 37。

我们只需要记住 print 什么就展示什么 write 什么我们就在对照表中的十进制中找到对应的图形显示即可

我们查看表 十进制的 9 和 7 对应的图形就是 9 和 7 Java中PrintStream 用法

println()会加入换行符,所以我们运行 out.println(0x61); 会增加一个换行符。 Java中PrintStream 用法 在 windows 中换行符是 \r\n,它们的十六进制表示为 0D 0A,所以我们用十六进制查看会是: Java中PrintStream 用法

write()

运行 write(0x61)的结果: Java中PrintStream 用法 0x61 对应的ASCII码的字母 ‘a’。这和运行 write(97) 的结果是一样的。然后我们在ASCII码对照表中的十进制中找到 97 Java中PrintStream 用法

PrintStream 练习

public class Main {
    public static void main(String[] args) throws Exception {
        PrintStream out = new PrintStream("d:/abc/f6");
        out.write(97);
        out.write(98);
        out.write(99);
        out.write(13);//回车符\r
        out.write(10);//换行符\n

        out.print(97);
        out.print(98);
        out.println(99);//自动加换行

        out.println(3.14);
        out.println(new Date());
        out.close();
    }
}

运行程序后会在 D 盘 abc 文件夹下 新建 f6 文件,内容为: Java中PrintStream 用法 转换为十六进制查看内容 Java中PrintStream 用法

PrintStream 与 DataOutputStream 的区别

这里说一点区别: PrintStream 会将任何数据,转成字符串输出,out.write(97)只会输出末尾字节 61。而 DataOutputStream 的out.write(97)输出完整4字节 00 00 00 61

其他的区别另一个作者总结的很好,可以查看java io系列16之 PrintStream(打印输出流)详解

转载自:https://juejin.cn/post/7018012951667802142
评论
请登录