本帖最后由 Lee0 于 2017-11-29 18:17 编辑
IO流:用于设备之间的数据传输
关于IO流的分类:
按照流向分为输出流和输入流;
按照数据类型分为字符流和字节流;
下面为我总结的IO流的大体知识结构
字符流:(只能操作纯文本文件)
输入流:Reader
FileReader 构造方法:file对象、String 字符串文件名
BufferedReader 构造方法:reader对象
高效流,可以一次读取一行
InputStreamReader 构造方法:InputStream对象
转换流,字节流通向字符流的桥梁
通过构造方法可以使用指定编码集进行转换 (InputStreamReader(InputStream in, String charsetName))
输出流:Writer
FileWriter 构造方法:file对象(,true)、String类型文件名(,true)
如果文件需要追加写入,可以通过构造方法后面加true来实现
BufferedWriter 构造方法:writer对象
高效流,特有方法:newLine()方法 换行 与系统无关
OutputStreamWriter 构造方法:outputStream对象
转换流,字符流通向字节流的桥梁
通过构造方法可以使用指定编码集进行转换
(OutputStreamWriter(OutputStream out, String charsetName))
PrintWriter 构造方法:file对象、outputStream对象(,true)、String文件名、writer对象(,true)
打印流,构造方法传字符流或字节流对象后加true可以实现自动刷新
可自动刷新的方法有println()、printf()、format()
Println()方法可以自动换行 与系统无关
字节流:(可以拷贝任何类型的文件)
输入流:InputStream
FileInputStream 构造方法:file对象、String文件名
ObjectInputStream构造方法:InputStream对象
对象流,反序列化流, 可以从文件中读取对象 使用方法 Obejct readObject()
使用自定义类时,需实现序列化接口(Serializable接口) 才能从文件中读取
注意:若要类无论如何修改都能正常进行序列化与反序列化,必须生成序列号。
一定是先序列化,才能进行反序列化。(先写才能读)
Static InputStream in
标准输入流 System.in
输出流:OutputStream
FileOutputStream 构造方法:file对象(,true)、String文件名(,true)
如果文件需要追加写入,可以通过构造方法后面加true来实现
ObjectOutputStream 构造方法:OuputStream对象
对象流,序列化流, 将对象写入文件 使用方法:void writerObject(object)
使用自定义类时,需实现序列化接口(Serializable接口) 才能从文件中读取
PrintStream 构造方法 file对象、outputStream对象(,true)、String文件名(,true)
打印流,构造方法传字符流或字节流对象后加true可以实现自动刷新
可自动刷新的方法有println()、printf()、format()
Println()方法可以自动换行 与系统无关
Static PrintStream out
标准输出流。 System.out
当使用IO流的时候可以先进行判断再决定使用哪个流:
1.考虑是输入还是输出?
2.传输的数据为什么格式?文本还是其他数据
3.是否需要使用转换流?字符转字节或者字节转字符
4.是否需要用高效流?一次读取一行
应该懂得这样一个道理:要努力,努力,再努力;如果开始不成功,还要努力,努力,再努力。 —— 威·希克森
|
|