1. 字符流
1.1字符输入流 - Reader - FileReader
涉及到连接的,用完了就要关闭。
**为什么read方法 返回的值是 int,而不是char?因为读到结尾的时候,char不好使,结尾 int 就为 -1。
案例:编写一个字符输入流,来读取外部文件中的数据
根据数据流动的方向 - 输入流
根据操作的数据类型 - 字符流
字符输入流 - Reader(FileReader 前面是来的源,后面是操作)
1.2 字符输出流 - Writer - FileWriter
案例:编写一个流 来将指定的字符写出到外部文件中
1.3 关流的过程
IO流用过之后必须保证关闭,但是 IO 流的代码中往往存在大量的异常,为了保证关流的操作一定会被执行,所以通过关流都在 finally 代码块中进行。而为了保证 finally 中可以看到流对象,通常
案例:编写一个程序,实现文件的拷贝
所谓的文件拷贝,实际上就是
1.4 使用缓冲区来提升程序的性能
1.5 使用缓冲流提升程序的性能
功能:
自带缓冲区 提升程序性能
提供一些新方法,方便操作
BufferedReader
BufferedWriter
1.6 增强类的方式
a. 继承
可以通过继承父类,在子类中增强能力,缺点是对父类对象无效。
b.装饰设计模式
可以对已有对象生效
c.动态代理
1.7 装饰设计模式
java中共有 23 种设计模式。装饰模式是其中的一种。所谓的设计模式,其实就是前人总结的写代码的套路。(动态代理,适配器)
主要的功能:就是在原有的被装饰者的基础上增加其他能力。
实现方式:
案例:为 Person 类通过装饰设计模式 使其能够飞
缓冲流 - BufferedReader 和 BufferedWriter 就是使用了装饰设计模式实现的。
实验:翻阅BufferedReader BufferedWriter 的源代码。
1.8 字符流 - 其他字符流
StringReader
数据来源是字符串的字符流
案例:利用StringWriter以一段
字节流 - 字节输入流
InputStream
字节流 - 字节输出流
OutputStream
案例:通过字节流,直接实现文件的复制
2. 转换流
字符流的底层也是字节流,只不过在字节流的基础上增加了缓冲区和编解码器。
字符流内置的但是 java 提供的字符流 缓冲区和编解码器是无法调整的,这在使用
案例:拷贝一个 utf-8 编码集 包含中文的文本文件 要求产生的文件也是 utf-8/gbk。
3. 系统流
在java中有一个重要的类,叫做System,代表当前系统,
通过系统流向控制台写数据
系统输出流
修改标准系统输出流输出位置
系统输入流
修改标准系统输入流输入位置
打印流 系列化流