面试必备:详解Java I/O流,掌握这些就可以说精通了? (5)

有两个“适配器” 流类型,它们可以将字节流转化成字节流。这就是InputStreamReader 可以将InputStream转成为Reader,OutputStreamWriter可以将OutputStream转成为Writer。

适配器类,字节流转字符流

在这里插入图片描述

在这里插入图片描述

当然也有类似字节流的装饰器实现方式,给字符流添加额外的功能或这说是行为。这些功能字符流类主要有:

BufferedReader

BufferedWriter

PrintWriter

LineNumberReader

PushbackReader

System类中的I/O流

想想你的第一个Java程序是啥?我没猜错的话,应该是 hello world。

1System.out.println("hello world")

简单到令人发指,今天就说说标准的输入/输出流。

在标准IO模型中,Java提供了System.in、System.out和System.error。

先说System.in,看下源码

1public final static InputStream in

是一个静态域,未被包装过的InputStream。通常我们会使用BufferedReader进行包装然后一行一行地读取输入,这里就要用到前面说的适配器流InputStreamReader。

1public class SystemInReader {
2    public static void main(String[] args) throws IOException {
3        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
4        String s;
5        while ((s = reader.readLine()) != null && s.length() != 0){
6            System.out.println(s);
7        }
8    }
9}

该程序等待会一直等待我们输入,输入啥,后面会接着输出。输入空字符串可以结束。

11
21
3123
4123

System.out是一个PrintStream流。System.out一般会把你写到其中的数据输出到控制台上。System.out通常仅用在类似命令行工具的控制台程序上。System.out也经常用于打印程序的调试信息(尽管它可能并不是获取程序调试信息的最佳方式)。

System.err是一个PrintStream流。System.err与System.out的运行方式类似,但它更多的是用于打印错误文本。

可以将这些系统流重定向

尽管System.in, System.out, System.err这3个流是java.lang.System类中的静态成员,并且已经预先在JVM启动的时候初始化完成,你依然可以更改它们。

可以使用setIn(InputStream)、setOut(PrintStream)、setErr(PrintStream)进行重定向。比如可以将控制台的输出重定向到文件中。

1OutputStream output = new FileOutputStream("d:/system.out.txt");
2PrintStream printOut = new PrintStream(output);
3System.setOut(printOut);
压缩(ZIP文档)

Java IO类库是支持读写压缩格式的数据流的。我们可以把一个或一批文件压缩成一个zip文档。这些压缩相关的流类是按字节处理的。先看下设计压缩解压缩的相关流类。

压缩类 功能
CheckedInputStream   getCheckSum()可以为任何InputStream产生校验和(不仅是解压缩)  
CheckedOutputStream   getCheckSum()可以为任何OutputStream产生校验和(不仅是压缩)  
DeflaterOutputStream   压缩类的基类  
ZipOutputStream   继承自DeflaterOutputStream,将数据压缩成Zip文件格式  
GZIPOutputStream   继承自DeflaterOutputStream,将数据压缩成GZIP文件格式  
InflaterInputStream   解压缩类的基类  
ZipInputStream   继承自InflaterInputStream,解压缩Zip文件格式的数据  
GZIPInputStream   继承自InflaterInputStream,解压缩GZIP文件格式的数据  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypwdw.html