一:节点流: 1.字节流:能处理一切文件,纯文本、视频、图片、音频 1)文件字节流:(以文件为源头)FileInputStream FileOutputStream 2)数组字节流:(以数组为源头)ByteArrayInputStream ByteArrayOutputStream toByteArray()新增方法,操作不同 2.字符流:只能处理纯文本文件 1)文件字节流:FileReader FileWriter 2)数组字节流:CharArrayInputStream CharArrayOutputStream 二:处理流:增强节点流的功能,提高可靠性 1.缓冲流:1)字节缓冲流:BufferedInputStream BufferedOutputStream 2)字符缓冲流:BufferedReader readLine() 一行一行的读取 BufferedWriter newLLine() 换行 相当于"\r\n" 注意运用新增方法时,不能使用多态 2.转换流:只能把字节流转换成字符流的,不能把字符流转换成字节流 1).编码与解码概念: 编码:二进制 编码字符集 字符 解码:字符 解码字符集 二进制 2).乱码原因: 1)编码与解码字符集不统一 2)字节缺少,长度丢失 3). InputStreamReader 解码(读取操作) OutputStreamWriter 编码(写入操作) 3.处理 基本数据类型+String 保存类型 DataInputStream readXxx() DataOutputStream writeXxx() 注意点:1)读取的顺序与写入的顺序必须相同 2)写入到文件中的内容由于保存了数据类型,因此我们无法识别,但计算机可以识别 4.处理 对象 保存对象 其实4相当于3的增强版,除了3的功能外,还可以处理对象类型: ObjectInputStream readObject() 对象的反序列化 ObjectOutputStream writeObject() 对象的序列化 注意:1) 不是所用的对象都能序列化 必须是实现了java.io.Serializable接口才能序列化 2) 不是所有的属性都需要序列化,不想序列化的属性使用 transient关键字 5.打印流:PrintStream System.in 从键盘输入 System.out 从控制台输出 System.err 和out差不多 注意:1)可以改变流向,比如不从键盘接收数据,而从文件中接收数据、输出数据到文件而不是到控制台 2)在System中定义了标准控制台:FileDescriptor.in FileDescriptor.out 可以使用setIn() 和 setOut() 方法进行重定向三:在流的操作中经常需要关闭流,大量的关闭会很繁琐,基于封装的思想,可以建立一个工具类来专门关闭流:
/** * 工具类:关闭流 * 可变参数:... 表示可以有很多参数,只能在形参的最后一个位置,处理起来和数组一样 * jdk1.7新增特性可以用try-with-resource实现该功能 */ /* public static void closeAll(String str, Closeable ... io) { }// 没有问题 public static void closeAll(Closeable ... io, String str) { }// 有问题 */ /** * 面向接口编程,实现了Closeable接口的类都有close()方法 * @param obj */ public static void closeAll(Closeable ... io) { for(Closeable temp: io) { if(null != temp) { try { temp.close(); } catch (IOException e) { System.out.println("关闭流异常"); e.printStackTrace(); } } } }

被折叠的 条评论
为什么被折叠?



