目录
IO流的概念和作用
概念:存储和读取数据的解决方案;
作用:用于读写本地文件,网络等相关数据;
分类:
输入流: 程序→文件;
输出流: 文件→程序;
按照操作文件类型分类:
字节流: 可以操作所有类型的文件;
字符流: 只能操作纯文本文件.
字节流和字符流
字节流:
① FileOutputStream 操作本地文件的字节输出流
方法:
书写步骤: ①创建字节输出流对象 ②读取数据(write方法) ③释放资源即关流(close方法).
② FileInputStream 操作本地文件的字节输入流
方法:
书写步骤: ①创建字节输出流对象 ②读取数据(read方法) ③释放资源即关流(close方法).
注意点: i 如果读取文件不存在会直接报错;
ii 一次读一个字节,读出的数据为ASCII上对应的数字,可用char类型转换;
iii 读到文件末尾,read方法返回-1.
若要循环读取数据,需引进一个变量将read方法读取的数据赋值给该变量进而循环读取,否则read方法读取后会移动指针,造成数据缺失.
字符流:
① FileReader 操作本地文件的字符输入流
方法:
i 按字节进行读取,遇到中文一次读多个字节,读取后解码,并返回一个整数;
ii 读到文件末尾,read方法返回-1.
若为read无参方法,则打印输出需要进行char类型数据强转;若是read有参方法则包含着强转.
② FileWrite 操作本地文件的字符输出流
构造方法:
成员方法:
书写步骤: ①创建字节输出流对象 ②读取数据(write方法) ③释放资源(close方法).
tips:
i 参数是字符串表示的路径或者File对象都是可以的;
ii 如果文件不存在时会创建一个新的文件,但要保证父级路径是存在的;
iii 如果文件已经存在,则会清空文件,若不清空文件则需打开续写文件(true).
缓冲流与转换流
缓冲流:
①字节缓冲流:
BufferedInputStream 字节缓冲输入流
BufferedOutputStream 字节缓冲输出流
原理:底层自带了长度为8192的缓冲区,提高的数据读取效率.
方法:
②字符缓冲流:
BufferedReader 字符缓冲输入流
BufferedWrite 字符缓冲输出流
特有方法:
输入流
输出流
缓冲流可以提高IO效率,它通过在内存中建立缓冲区来减少对外部设备的访问次数 , 在处理大量数据时,使用缓冲流可以显著提升程序的性能.
转换流:
InputStreamReader 字符转换输入流
OutputStreamReader 字符转换输出流
作用: 指定字符集读取数据(jdk11之后已被淘汰);
字节流要使用字符流中的方法.
文件输入输出流
File类:
① File对象表示路径,可以是路径,也可以是文件夹. 路径可以是存在的,也可以是不存在的.
② 绝对路径是带盘符的;相对路径不是不带盘符的,默认到当前项目下去找.
File三种构造方法及作用:
① public File(String pathname) 把字符串表示的路径变成File对象
② public File(String parent , String child) 把父级路径和子级路径进行拼接
③ public File(File parent , String child) 把父级路径和子级路径进行拼接
方法:
File常见成员方法(判断 , 获取)
File常见成员方法(删除 , 创建)
File常见成员方法(获取并遍历)
以用于读取和写入文件,通过文件输入输出流,可以实现文件的复制、移动、删除等操作。
序列化和反序列化
序列化流又称对象流,用于存储和读取基本数据类型数据或对象的处理流.
① ObjectOutputStream 序列化流(对象操作输出流)
作用: 将java中的对象写到本地文件当中.
构造方法:
成员方法:
② ObjectInputStream 反序列化流(对象操作输入流)
作用: 将序列化到本地文件中的对象读取到程序中来.
构造方法:
成员方法:
注意点:
1: 使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口,否则会出现NotSerializableException 异常; 该接口无抽象方法,为标记型接口.实现该接口,类可以被序列化(相当于一个物品的合格证);
2.序列化流写到文件中的数据是不能修改的,一旦修改则无法再次读回;
3.序列化对象后,修改了Javabean类,再次反序列化会出现问题,抛出InvalidClassExpection异常; 解决方案: 给Javabean类添加serialVersionUID(序列号 , 版本号 , 避免在反序列化时出现版本不一致的问题.这样做可以提高程序的稳定性和可靠性);
4.如果一个对象中的某个成员变量不被序列化,则可以给该成员变量添加transient关键字修饰,该关键字标记的成员变量不参与序列化过程.
打印流
① PrintStream 字节打印流
特点: ①打印流只操作文件目的地,不操作数据源;
②特有的写出方法 , 数据原样写出;
③特有的写出方法,可以实现自动刷新,自动换行.
构造方法:
成员方法:
② PrintWrite 字符打印流
区别:字符流底层有缓冲区,效率更高,若要自动刷新需要重启.
构造方法和成员方法同上.
总结
本周学习了IO流知识模块,内容感觉较多,需要我不断复习应用以及练习。下周需要写一个练习了,自己要维持好状态,完成好任务。