Java之IO流总结
java中I/O流是由Java.io包实现的,其中的类大部分分为输入和输出两个部分,Java.io包最顶层包含子类较多的两个类是InputStream和OutStream(两者都继承Object类)
下述为流的层次:
字节流:
重点掌握一下流的用法:
1、ByteArrayInputStream、ByteArrayOutputStream
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去
2、FileInputStream、FileOutputStream
3、ZipInputStream、ZipOutputStream(包装流)压缩流
在流数据中一个很重要的设计模式是:装饰器设计模式,我们可以根据我们对功能的需要任意组合、加载我们需要的流,用通俗的话来说,把它们层层包裹在一起
4、BufferedInputStream、BufferedInputStream(包装流)
5、DataInputStream、DataOutputStream(包装流)
6、ObjectInputStream、ObjectOutputStream。
ObjectOutputStream可以把对象直接存入到文件中,然后利用ObjectInputStream读取文件还原成对象,前提是该对象实现了Serializable接口如果有的属性不想被序列化,则可以添加修饰符transient。
7、PipedInputStream、PipedOutputStream
管道流内部在实现时还有大量的对同步数据的处理。管道输出流和管道输入流执行时不能互相阻塞,所以一般要开启独立线程分别执行。
8、DataOutputStream和DataInputStream都属于数据流,可以针对Java基本数据类型进行读写操作。
9、ByteArrayInputStream和ByteArrayOutputStream为内存操作流,针对内存的数据进行操作的,程序一结束,这些内存数据也就消失了。
字符流:
1、InputStreamReader 类是字节到字符的转化桥梁,InputStream 到 Reader 的过程要指定编码字符集,否则将采用操作系统默认字符集,很可能会出现乱码问题。StreamDecoder 正是完成字节到字符的解码的实现类。
2、FileReader、FileWriter,这是1中的简化流
3、BufferedReader、BufferedWriter
和BufferedInputStream、BufferedOutputStream不同的是,BufferedReader、BufferedWriter提供了ReadLine、newLine()这种以行为单位的字符读写机制
4、CharArrayReader、CharArrayWriter
CharArrayReader 是字符数组输入流。它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader。操作的数据是以字符为单位
FilterReader、FilterWriter
用来”封装其它的字符输入流,并为它们提供额外的功能”
PipedReader、PipedWriter
字符管道流,原理上和PipedInputStream类似
PrintWriter
printwriter是向文本输出流打印对象的格式化表示形式,它允许以一种格式化的方式进行数据流的写入,类似C语言中的printf()函数