【翻译】Java IO 关系总览和整理
http://tutorials.jenkov.com/java-io/overview.html
这篇文档我将会尝试展示JAVA IO包。更具体地说,我将试着在他们的目的之后分组。这个分组应该使您将来更容易确定类的用途,或者找到特定用途所需的类。
输入输出源-目的地(Input and Output - Source and Destination)
输入和输出两个词有时可能会有一些使人疑惑。应用程序的一部分的输入通常是另一部分的输入。outputStream是一个输出的流写入的地方,还是输出出来(供您阅读)?毕竟,输入流将其数据输出到读取程序,不是吗?就我个人而言,在我第一次开始学习Java IO的时候,我发现这有点令人困惑。
为了解释疑惑,我试图在输入和输出上添加一些不同的名称,试图在概念上将它们与输入来自哪里以及输出去向哪里联系起来。
Java的IO包主要涉及到从源读取原始数据并将原始数据写入目的地。最典型的数据来源和目的地是:
下面的图表说明了一个程序从源读取数据并将其写入某个目的地的原理:
流(Streams)
IO流是Java IO的一个核心概念。流是概念上无限的数据流。您可以从流中读取,也可以向流中写入。流连接到数据源或数据目的地。Java IO中的流可以基于字节(读写字节BYTE),也可以基于字符(读写字符characters)。
The InputStream, OutputStream, Reader and Writer
需要从某个源读取数据的程序需要一个InputStream或Reader。需要将数据写入某个目的地的程序需要OutputStream或Writer。下面的图表也说明了这一点:
输入流或阅读器链接到数据源。输出流或写入器链接到数据的目的地。
Java IO用途和特性
Java IO包含许多InputStream、OutputStream、Reader和Writer类的子类。原因是,所有这些子类都用于不同的目的。这就是为什么有这么多不同的类。所述目的摘要如下:
在阅读Java IO类时,了解这些目的是很好的。它们使我们更容易理解类的目标。
Java IO类概览表
已经讨论了来源、目的地、输入、输出和各种Java IO类的目标,
这是一个表清单,大多数(如果不是全部)Java IO类被按照输入,输出,基于字节或字符,和任何特定的目的,他们可能会寻址(addressing),如缓冲、解析(parsing)等等区分。
Java中的文件读取:
比较常用的是InputStream和outputStream
1 InputStream inputstream = new FileInputStream("c:\\data\\input-text.txt"); 2 //创建了一个新的FileInputStream实例
3 int data = inputstream.read(); 4 while(data != -1) { 5 //do something with data... 6 doSomethingWithData(data); 7 8 data = inputstream.read(); 9 } 10 inputstream.close();//读取完关闭
这个例子创建了一个新的FileInputStream实例。FileInputStream是InputStream的子类,因此将FileInputStream的实例分配给InputStream变量(InputStream变量)是安全的。这里涉及的子类和父类知识不再解释。
1 InputStream inputstream = new FileInputStream("c:\\data\\input-text.txt"); 2 3 byte[] data = new byte[1024]; 4 int bytesRead = inputstream.read(data); 5 6 while(bytesRead != -1) { 7 doSomethingWithData(data, bytesRead); 8 9 bytesRead = inputstream.read(data); 10 } 11 inputstream.close();