We believe that writing is about content, about what you want to say – not about fancy formatting.
我们坚信写作写的是内容,所思所想,而不是花样格式。
— Ulysses for Mac
Java第10天
今天主要学了I/O流
思维导图:

Java的IO流是实现输入/输出的基础,它可以方便的实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源。stream是从起源到接收的有序数据。
(因Java提供了这种IO流的抽象,所以开发者可以使用一致的IO代码去读写不同的IO流节点)
首先要了解:
流向中输入、输出都是从程序运行所在内存的角度划分的:

Java流类图结构:

注:
1 字符流不是Reader 就是Writer
2 Java的输入流主要由InputStream和Reader作为基类,而输出流则主要由OutputStream和Writer作为基类,它们都是一些抽象基类,无法直接创建实例。
3 字节流和字符流用法几乎完全一样,区别是字符流操作的数据单元是16位的字符(适合操作 文本文件);字节流操作的数据单元是8位的字节(适合操作 二进制文件)
流的分类:
分类角度 | 类型1 | 类型2 |
---|---|---|
数据流向 | 输入流 | 输出流 |
数据类型 | 字符流 | 字节流 |
功能角度 | 缓存区流 | 非缓存区流 |
角色角度 | 节点流 | 处理流 |
其中部分组合:
输入流 + 字符流 ———— Reader
输出流 + 字符流 ———— Writer
输入流 + 字符流 + 缓冲区 ———— BufferedReader
输出流 + 字符流 + 缓冲区 ———— BufferedWriter
输入流 + 字节流 ———— InputStream
输出流 + 字节流 ———— OutputStream
输入流 + 字节流 + 缓冲区 ———— BufferedInputStream
输出流 + 字节流 + 缓冲区 ———— BufferedOutputStream
...
(可按此方法尝试组合分类)
分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BuffereWriter |
访问字符串 | StringReader | StringWriter | ||
转换流 | InputStreamReader | OutputStreamWriter | ||
打印流 | PrintStream | PrintWriter |
各种组合I/O类 操作参见PPT:
今天内容较多,后续再更新关键类 例程
欢迎指正交流
延伸阅读:
1 - Java IO最详解
2 - Java IO流学习总结
世界上所有的追求都是因为热爱
一枚爱编码 爱生活 爱分享的IT信徒
— hongXkeX
网友评论