1.如何判断使用哪种流?
用系统自带的记事本打开可以读懂的可以用字符流,读不懂的只能用字节流。
2.FileReader和InputStreamReader的关系?
FileReader是InputStreamReader的子类,是InputStreamReader的简化模式。
3.创建字节流对象做了哪些事情呢?
FileOutputStream fos=new FileOutputStream("a.txt");
①调用系统资源创建文件
②创建字节输出流对象
③让字节输出流指向文件
4.为什么要关闭流?
①让对象变成垃圾,方便垃圾回收器回收
②让系统释放与该对象相关的资源
5.缓冲区流
缓冲区有大小,存入一定数据,刷新或关闭流的时候会强制一次性写入数据,避免多次访问磁盘,提高效率。
6.字符流=字节流+编码,字符流本质是包装了字节流。
7.内存操作流
内存操作流一般用于处理临时信息,因为临时信息不需要保存,使用后就可以删除,底层是数组。
8.打印输出流
①只能写不能读,用自动刷新功能(带自动刷新的打印流必须使用println方法),可以操作基本流,也可以操作高效流。
②println方法相当于readLine()、Write()、newLine()的功能。
9.标准输入输出流
System的成员变量in、out分别代表标准输入流和标准输出流。默认输入设备是键盘,默认输出设备是显示器(其实就是控制台).
10.RandomAccessFile随机访问流
①其实随机访问流不是流,只是融合了InputStream和OutputStream的功能,可写可读。此类的实例支持对随机访问文件的读取和写入。访问模式常用"rw" ,打开以便读取和写入。若文件不存在,则创建文件。
②随机访问流的public long getFilePointer()throws IOException方法可以获取当前数据的指针。
11.合并流SequenceInputStream和SequenceOutputStream
合并流可以把多个文件内容合并在一起。
构造方法1:SequenceInputStream(InputStream s1, InputStream s2)这个只能合并2个文件
构造方法2:SequenceInputStream(Enumeration<? extends InputStream> e)这个构造方法可以合并多个文件,只要给参为Enumeration的实现类就行。
①可以用创建元素为InputStream的Vector集合 Vector<InputStream> v = new Vector<>();根据多态把元素(文本)添加到集合
②调用Vector集合的方法public Enumeration<E> elements()返回的是Enumeration
③创建SequenceOutputStream流,然后读写就行.
12.序列化流ObjecIntputStream和ObjectOutputStream
序列化: 把对象像流一样在文本文件或者网络中存储 (一般的格式是与平台无关的二进制流)对象-----流数据 反序列化: 把文本文件中的流对象或者网络的流对象还原成对象 流数据-----对象
①序列化的类要实现Serializable接口,Serializable接口是标记接口,没有方法,只有实现这个序列化标记接口才能实现序列化或者反序列化。
②transient关键字,加了这个关键字后不能序列化。