在网上看到Java的I/O,心中想:以前学过吗?而且听说,这个东西对于从事Java行业的人来说有特别的重要。压抑不住一只小白(我)的心理,来了解一下Java的I/O。
我在网上随便找了一本书,来看一下Java对于I/O的处理。
这里主要讲的是输入流和输出流,输出流和输入流是相对于程序本身而言的。程序读取数据称为打开输入流,程序向其他源写入数据称为打开输出流。看图:
注:(大神忽略)开始我也不是特别明白这是什么意思,(以程序为主语)程序读进入程序的数据是输入流,程序向外输出数据即打开了输出流,输出流。
在java.io包中有各种I/O流类,这里按照输入输出流处理的 不 同 数 据 类 型 对流进行分类,即字符(Character)流和字节(Byte)流。
1.字符流(16bit):
在Java的I/O系统提供了InputStream和OutputStream两个抽象类实现字节(8位)数据的输入/输出。其中InputStream是输入流的抽象类,提供了read()方法,每个实现了该类的子类都要实现该方法。
输入流类:InputStream是一个抽象类,提供了抽象的read()方法。 输出流类:OutputStream 提供了write()方法,同样也是一个抽象类。
注:每个抽象类都有多个类继承,复写提供的方法,可以在api文档java.io中找到,节省篇幅,不予写出。
2.字节流(8bit):
字节流也分为读流数据类和写流数据类,即Reader类和Writer类及其子类。Writer类是字符(Character)流输出类的父类,它是抽象类,所有继承自该类的子类都必须实现抽象方法write(),具体的实现类中write()方法的使用可以参考相应的JavaDoc文档。这里为了区别InputStream和OutputStream使用了Reader和Writer,为了使读者习惯于使用Reader和Writer,并且中文中没有合适的词汇表达相应的流的概念,所以不再具体翻译为中文,使用时只要知道Reader类负责读流数据,而Writer类负责向流中写数据即可。
Write和Read都有多个类继承了他们。
a.Writer:继承自Writer类
BufferedWriter(带缓冲的Writer)
CharArrayWriter(字符数组Writer)
FilterWriter(带过滤器Writer)
PrintWriter(打印Writer)
PipedWriter(管道Writer)
StringWriter(字符串Writer)
OutputStreamWriter (输出流Writer) , FilerWriter(文件Writer)继承OutputStreamWriter 。
b.继承自Reader类
BufferedReader
CharArrayReader(字符数组Reader)
FileReader
InputerStreamReader
FiterReader
LineNumberReader(带行号Reader)
PipedReader
PushbackReader(推回Reader)
StringReader
接着在这说一下在网上看到的同时也解决了我的疑惑:
不管是磁盘还是网络传输,最小的存储单元都是字节,而不是字符,所以 I/O 操作的都是字节而不是字符,但是为啥有操作字符的 I/O 接口呢?这是因为我们的程序中通常操作的数据都是以字符形式,为了操作方便当然要提供一个直接写字符的 I/O 接口。
依据《Java:从入门到精通》这本书所写,有兴趣的可取看一下(大神无视就可以)
本人java初学者,肯定有写的不规范的地方还请指正( ⊙ o ⊙ )