IO流要自己去记得东西比较多,如果记得不熟很容易混,昨天学了一天的IO流,但今天感觉又有点忘了,今天系统的总结一下:
一:IO流分类
IO流分类有好多种,但我认为重要的需要记住的就一种就可以:即
字节流:一次读取1个 字节
字符流:一次读取2个字节
区别:字符流只能对文本文件进行读取,它比字节流对文本文件的操作效率高,字节流主要是对非文本文件(如一些媒体文件 :图片,电影,音乐等)进行操作的
注意:字节流可以对所有类型的文件进行操作。如果用字节流操作文本文件,没有字符流操作文本文件 效率高。
二:IO流的体系结构:
只需记住一张图即可
三:需要知道序列化和反序列化
序列化:将内存中的I对象以二进制形式永久的保存到磁盘中去
简单来说序列化就是一种用来处理对象流的机制。所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O)。我们可以对流化后的对象进行读写
操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!在对对象流进行读写操作时会引发一些问题,而序列化机制正是用来解决这些问题的
反序列化:将磁盘中的保存的对象读取
四:转换流也需要了解一下吧
转换流:InputStreamReader 和OutputStreamWrite
转换流主要是进行编码和解码操作的:
编码:字符串到字节数组的过程
解码:字节数组到字符串的过程
五:java.io.File类,用于表示文件或者目录,能进行新建、删除、重名名等操作,File对象但不能对文件内容进行操作,如果要对文件内容进行操作,需要使用IO流来完成,通常将File对象和IO流对象配合使用,将File对象作为参数传递给IO流的构造器使用。
最后说一下read和readLine()的区别吧,因为有时候总是分不清楚,read方法当读到没有数据时返回-1,而readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println()这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println()放到while循环体内也可以。
个人感觉IO流记住这些已经可以够用的了