1.回顾
字符流
FileWriter
FileReader
拷贝文本文件案例:使用一次读一个字符数组, 写一个字符数组的一部分。
字节流
FileOutputStream
FileInputStream
拷贝图片、音视频等二进制流数据案例:使用一次读一字节数组,写一个字节数组的一部分。
缓冲流
增加缓冲区功能。
拷贝文本文件案例
使用BufferedWriter和BufferedReader:使用一次读一个字符数组, 写一个字符数组的一部分。
缓冲字符流特有读写
readLine() -- 读取一行,但不包含换行符
newLine() -- 写入一个换行符
拷贝图片、音视频等二进制流数据案例
使用BufferedOutputStream和BufferedInputStream:使用一次读一字节数组,写一个字节数组的一部分。
2. 标准输入输出流
System.in -- 返回 BufferedInputStream -- 多态用法用 InputStream 接收
System.out -- 返回 PrintStream -- 多态用法 用OutputStream 接收
3. 从键盘录入数据保存到文本文件
System.in 字节流输入
转换流 InputStreamReader -- 字节流到字符流的桥梁
字符流再包一下 -- 缓冲流BufferedReader
BufferedWriter 缓冲的字符流输出
4. 从文本文件把数据读取写入到控制台显示
BufferedReader 缓冲的字符流输入
转换流: OutputStreamWriter -- 字符流到字节流的桥梁
字符流再包一下 -- 缓冲流BufferedWriter
System.out 字节流的输出
注意:
两个转换流理解上 :按数据流向来理解
实际使用上都是把字节流转换成了字符流
理解:
InputStreamReader
封装:BufferedReader – InputStreamReader – InputStream
转换:字节到字符
OutputStreamWriter
封装:BufferedWriter – OutputStreamWriter – OutputStream
转换:字符到字节
字符流和字节流是根据处理数据的不同来区分的。
字节流按照8位传输,字符流按照16位传输
由于字符流使用Unicode字符集,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。
字符流的传输效率比字节流的高。
5.打印流
只有输出流
PrintStream 字节打印流
PrintWriter 字符打印流
特点:
可以写入任意类型
自动刷新,但是要开启,并且使用println printf format 方法之一
可以直接写入文件(类似于那四个File开头的基本流)
6.序列化流
序列化:把对象写入文件 ObjectInputStream
-- 注意:对象要实现Serializable接口,标识该对象可以被序列化。
反序列化:从文件中读取对象。ObjectOutputStream
(修改了文件,再读回来,抛异常)
7.如果想指定编码 用转换流
8.Properties 表示属性集的集合类 父类是Hashtable
作为集合:
修改:setProperty(String k, String v)
获取:getProperty(String k) -- 通过键获取值,没有,返回null
getProperty(String k, String dv) --通过键获取值,如果没有,返回dv
Set<String> stringPropertyNames() -- 获取键的集合
8.1 System.getProperties() -- 调试很有用
8.2
Properties的list(PrintStream ps) / list(PrintWriter pw)
-- 把集合里面的数据写到打印流中。
Properties的load(InputStream is) / load(Reader r)
-- 把流中的数据加载到集合中。
Properties的store(OutputStream os, String comments) / store(Writer w, String comments)
-- 把集合里面的数据写到输出流中。
注:.properties属性文件中的注释符号 : #
|
|