IO流
输入/输出时指应用程序与外围设备及其他计算机进行数据交换的操作,如读/写硬盘数据、向显示器输入数据、通过网络读取其他节点的数据等。简单而言:流就是内存与存储设备之间传输数据的通道、管道。
以三种不同的分类方式分类如下:
按方向(以JVM虚拟机为参照物)
输入流:将<存储设备>中的内容读入到<内存>中
输出流:将<内存>中的内容读入到<存储设备>中
按单位:
字节流:以字节为单位,可以操作所有类型的文件。
字符流:以字符为单位,只能操作文本类型的文件。(.txt,.java,.html,.xml)
按功能:
节点流:完成数据读写
过滤流:为其他流增强功能(节点流是枪,用来打敌人,过滤流就是瞄准镜,更好地对付敌人,辅助枪使用。)
使用流四步:
1、创建节点流
2、包装过滤流
3、读写数据
4、关闭流(最外层)
常用的流:
数据源类型:
1、纯文本数据源:FileReader、FileWriter
2、非纯文本数据源:InputStream、OutputStream
3、byte[]数据源:ByteArrayInputStream、ByteArrayOutputStream
4、char[]数据源:CharArrayReader、CharArrayWriter
5、String[]数据源:StringReader、StringWriter
6、网络数据流:InputStream、OutputStream、Reader、Writer
格式化打印:
1、字节输出:PrintStream
2、字符输出:PrintWriter
缓冲:
1、字节缓冲:BufferedInputStream、BufferedOutputStream(flush()清空输出缓冲区)
2、字符流缓冲:BufferedReader、BufferedWriter
其他:
1、字节流转换为字符流(桥转换):InputStreamReader、OutputStreamWriter
2、进程间通信:PipedInputStream、PipedOutputStream、pipedReader、PipedWriter
3、读写对象:ObjectOutputStream、ObjectInputStream
4、zip压缩流:ZipOutputStream、ZipInputStream
**字符的编码**:字符的编码方式和解码方式不统一,可能造成乱码问题 ASCII 美国 ISO-8859-1 西欧 GB2312 简体中文 GBK 简体中文 Big5 繁体中文 Unicode 全球统一 UTF-16、UTF-8(变长)
ObjectOutputStream/ObjectInputStream–读写对象(过滤流)
通过流传输对象:对象序列化只有实现(implements)了Serializable接口的对象才能序列化.
transient修饰符:修饰的属性为临时属性,不参与对象序列化。
读对象时用try-catch捕获EOFException结束读文件。
反序列化过程中,这个类未实现序列化,则反序列化通过构造方法。如果这个类实现了序列化,则重建对象靠的是序列化规则,不调构造方法