Java之IO(零)总结

  转载请注明原出处:http://www.cnblogs.com/lighten/p/7274378.html

1.前言

  本章是对之前所讲述的整个Java的IO包的一个总结,抽出个人认为比较重要的知识点来进行归纳。

2.体系

  

  上面四幅图就是Java的IO包的继承关系了,这些类大致上都在其它的章节中介绍过一次,下列出我写的相关内容的目录。

  Java之IO(一)InputStream和OutputStream

  Java之IO(二)BufferedInputStream和BufferedOutputStream

  Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream

  Java之IO(四)DataInputStream和DataOutputStream

  Java之IO(五)文件系统

  Java之IO(六)FileInputStream和FileOutputStream

   Java之IO(七)ObjectInputStream和ObjectOutputStream

   Java之IO(八)PipedIutputStream和PipedOutputStream

  Java之IO(九)其它字节流

  Java之IO(十)Reader和Writer

  Java之IO(十一)BufferedReader和BufferedWriter

  Java之IO(十二)CharArrayReader和CharArrayWriter

  Java之IO(十三)File、Filter、Piped、String和InputStreamReader与OutputStreamWriter

  Java之IO(十四)IO包中其它类

  这些内容大体都描述的比较无聊,中间有些使用的小例子,还有些测试说明。写的不好,在下面会将其中比较有用的信息提取出来,有兴趣看的也可以看看。

3.流说明

  此节主要明确流的各个方法的使用。

3.1 InputStream

  输入字节流的规定方法就是上图所给,其所有子类和实现类要满足下面的方法说明才行。

  read():读取一个字节,并返回。如果读到末尾返回-1,其读取的范围是0~255。

  read(byte[],int,int):读取指定数量的字节,并赋给所给从指定下标开始的数组,返回实际读取并赋值的数量。

  skip(long):跳过指定数量的字节,返回实际跳过的字节数。

  available():返回流预计剩余可读取的字节数。

  close():关闭该字节流

  mark(int):设置在标记位置失效之前可以读取的字节的最大限制,前提是markSupported为true,支持标记。在有些流中这个传递的参数没有意义。

  reset():重置流到标记的位置,前提是支持标记且标记过了。

  markSupported():判断这个流是否支持标记

3.2 OutputStream

  write(int):写入一个字节

  write(byte[],int,int):写入所给字节数组指定下标开始的指定数量的字节

  flush:将缓存的数据写入指定源。不保证一定写入了,比如文件流,只保证通知了操作系统写入数据到磁盘,不保证这些数据已经被写入磁盘。

  close:关闭流。

3.3 Reader

  与InputStream方法类似,不同之处在于:1.多了一个ready()方法判断流是否准备好,可以进行读取了。2.其抽象方法是read(char[],int,int),read方法是有实现的,InputStream是read方法是抽象的。

3.4 Writer

  writer的相关方法和OutputStream的也十分相似,并没有什么值得一提的内容。

4.其它要点

  1、第7篇测试了一下一个文件写入多个对象的问题,并没有发现不能读取,大家可以试试,暂不清楚是否是JDK1.8修复了这个问题,还是本就不存在此问题。

  2、第8篇对管道流进行了测试,想了解的可以具体看看。

  3、第9篇末尾讨论了一下为何流的结束以-1来判断,读取的值难道不会正好是-1吗?那里写的有点乱,这里简单说明一下:不管用什么作为结束判断标识符,都无法避免读取的和判断的标志符相同的可能,判断流是否结束都不是以-1来判断的,而是流结束了才会给-1这个标识符,先知道结束然后才给的标志,而不是以预计的结束标识符来判断是否结束。至于读取的字节为何不会与标志符相同,在第9篇的一个实验已经说明了,利用了编码的小特性,流的接口也说明了,所有的字节都被限制在了0~255,返回了-1自然不会是读取到的。读取的-1实际上被转成了在0~255范围内的其它值,也可以很方便的通过编码转回来。

  4、第14篇介绍了两个实用的类RandomAccessFile和StreamTokenizer。可以看看。

原文地址:https://www.cnblogs.com/lighten/p/7274378.html