IO流

“如果说容器对多态是赤裸裸的实现的话,那么IO流将多态已经融入到骨子里!”
一。流(IO)的分类
1.按照对数据读写的方向分为:输入流和输出流,比如InputStream,OutputStream,reader,writer等。
2.按照读写数据时的最小单元分为:字节流和字符流,比如InputStream就是字节流,reader和writer是字符流,但是字节流可以转换为字符流,InputStreamReader,InputStreamWriter就是从字节流转化为字符流的。
3.按照功能不同分为:节点流和处理流,比如FileInputStream是节点流,DataOutputStream,BufferedInputStream是处理流。
二。IO的魅力
凡是存在多态的地方必定会让一个枯燥的程序变得让人兴奋起来。
1.从缓慢的读写到成倍读写---从字节流转向字符流
比如字节流InputStream转成字符流为InputStream isr=new InputStreamReader(System.in,"ISO8859-1");
再比如:OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\ddd.java"));
这种从字节到字符的转换的流叫转换流,它可以是字节流从原来的一个字节的读取变为一个字符的读取大大加快了数据的读写速度。
2.套接在流上的流---处理流
处理流可以使我们的流管道更加强大和自如。
比如BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("d:\\ddd.java"));
处理流中提供了更多的处理数据的方法,这些方法显著的提高了我们对数据的操作效率。
3.没有输入的流---Print流(处理流)
PrintStream(字节流)和PrintWriter(字符流)是Print流的仅有的两个流。
比如:FileWriter fw=new FileWriter("d:\\ddd.java");
PrintWriter pw=new PrintWriter(fw);
4.可以处理对象数据的流---Object流(处理流)
对象流可以将对象直接输入或者输出出来。比如我们定义了一个Person类,该类有他的成员变量和方法。将该类的对象输出到文件中:
Person p=new Person();
FileOutputStream fos=new FileOutputStream("D:\\ddd.java");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(p);
但 是我们读取该Person类之前必须让该类实现Serializable接口用来标记该类可以被序列化。如果该类的某一成员变量之前被transient 接口(透明的)修饰,那么在序列化该类的时候该成员变量不被序列化。externalizable继承了Serializable可以控制序列化一个类按 照自己的想法去序列化。
5.总结
API中很详细的归纳出了流的所有类,因此在项目中可以充分参考。

原文地址:https://www.cnblogs.com/itzone/p/2869203.html