译者注:作为一个Java菜鸟,一直对输入输出流表示十分混沌。这个tutorial的出现,让我对Java IO有了一个比较清晰的认识,所以把它翻译在这,作为自己学习的记录,也可以跟大家分享。原文链接:http://tutorials.jenkov/java-io/index.html。本篇是前两课的译文。
一、JAVA IO简介
大多数的JAVA应用都需要接收一些输入,并且根据这个输入做一些输出。JAVA IO包(java.io)的目的,就是实现这个任务。
如果你看了java.io中的类,这么多的类会让人非常困惑。这些类的目的都是什么?对于一个给定的任务,你要选择哪个类去使用?如何建立自己的IO类……这篇教程的目的是告诉你这些类是如何被分类的,它们的作用是什么。让你不用再怀疑自己选择的类是否正确,不用再困惑你需要的类是否已经存在。
java.io的范围
java.io没有处理所有类型的输入和输出,比如在一个用户界面或者网页上,获得输入、发布输出就没有被包含在java.io中。这些类型可能被包含在其他包里,比如Swing工程中的JFC类,或者是企业版JAVA的Servlet或HTTP包中。
java.io只关注于比较基础的,文件、网络流、内存缓存等的输入和输出。
这篇JAVA IO教程的范围
以下是这篇教程的内容,这篇教程并不是一个接口列表,你可以从sun公司的官网上的java文档中获得接口列表。这篇教程其实是对每个类的一个简短的介绍,包括它的作用,和一些使用它的例子。换言之,是一些你在java文档中无法找到的东西。
Java IO | ||
Java IO 简介 | ||
Java IO 综述 | ||
Java 文件 | ||
Java 管道 | ||
Java 网络流 | ||
Java 字节+字符串 | ||
Java System.in / .out / .error | ||
Java 流 | ||
Java 读/写 | ||
Java 输入解析 | ||
Java 并发IO | ||
Java IO异常处理 | ||
Java InputStream | ||
Java OutputStream | ||
Java FileInputStream | ||
Java FileOutputStream | ||
Java RandomAccessFile | ||
Java File | ||
Java PipedInputStream | ||
Java PipedOutputStream | ||
Java ByteArrayInputStream | ||
Java ByteArrayOutputStream | ||
Java FilterInputStream | ||
Java FilterOutputStream | ||
Java BufferedInputStream | ||
Java BufferedOutputStream | ||
Java PushbackInputStream | ||
Java SequenceInputStream | ||
Java DataInputStream | ||
Java DataOutputStream | ||
Java PrintStream | ||
Java ObjectInputStream | ||
Java ObjectOutputStream | ||
Java Serializable | ||
Java Reader | ||
Java Writer | ||
Java InputStreamReader | ||
Java OutputStreamWriter | ||
Java FileReader | ||
Java FileWriter | ||
Java PipedReader | ||
Java PipedWriter | ||
Java CharArrayReader | ||
Java CharArrayWriter | ||
Java BufferedReader | ||
Java BufferedWriter | ||
Java FilterReader | ||
Java FilterWriter | ||
Java PushbackReader | ||
Java LineNumberReader | ||
Java StreamTokenizer | ||
Java PrintWriter | ||
Java StringReader | ||
Java StringWriter |
二、Java IO综述
在这部分我会对java.io中的类进行一个综述,具体的说,我将根据它们的作用将它们分类。这种分类会让你更容易决定使用哪个类来解决问题。
以下是这一课的三个议题:
1.输入和输出-源和目标
2.java IO的目的和特性
3.java IO类概览
1.输入和输出-源和目标
对于”输入“和”输出“这两个词,有时会有一些混淆。一个程序的输入通常是另一个程序的输出,OutputStream究竟是将输出写入其中的流,还是输出的来源?毕竟,InputStream是将它的数据“输出”到“读取”程序中,不是吗?对我来说,我在刚学习java IO的时候对这一点有些困惑。
为了解开这个困惑,我将“输入”和“输出”改名,将它们与“这个输入从哪里来”和“这个输出要到哪里去”联系起来。(于是便有了所谓的“源和目标”)
对大多数的java程序来说,它们只关心将原始数据从“源”读到,并且将其写到“目标”中。典型的源和目标的形式包括:
- 文件
- 管道(pipes,指线程之间的数据传输,不确定是否翻译成管道)
- 网络连接
- 内存缓存
- System.in/.out/.error
下图表示了,程序从源中读取数据,并将其写入目标当中的过程。
程序在从“源”读取数据时,需要InputStream或者Reader.程序在往“目标”中写数据时,需要OutputStream或者Writer.这同样可以通过图表示为:
所以,InputStream与一个“源”相联系,OutputStream与一个“目标”相联系。我们跟“源”打交道的时候用到InputStream或者Reader,跟“目标”打交道的时候用到“OutputStream"或者"Writer".
2.Java IO的目的和特性
JAVA IO中的类有着不同的作用,可以解决不同的问题,这也就是为什么会有这么多类。这些问题,也就是Java IO类的作用可以总结为以下这些点:- 文件存取
- 网络存取
- 内存缓存存取
- 线程间交流管道
- 缓存
- 过滤
- 读写文本
- 读写基本类型数据(long, int...)
- 读写对象
3.Java IO类概览
在讨论完“源”、“目标”、输入、输出以及java IO不同类的不同作用之后,这里将会有一个几乎完整的JAVA IO类的列表,按照输入、输出、基于字符、基于字节、以及其他具体用途进行了分类:基于字节 | 基于字符 | |||
输入 | 输出 | 输入 | 输出 | |
基本 | InputStream | OutputStream | Reader InputStreamReader | Writer OutputStreamWriter |
数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
文件 | FileInputStream RandomAccessFile | FileOutputStream RandomAccessFile | FileReader | FileWriter |
管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
缓存 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
过滤 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
解析 | PushbackInputStream StreamTokenizer | PushbackReader LineNumberReader | ||
字符串 | StringReader | StringWriter | ||
数据 | DataInputStream | DataOutputStream | ||
数据 - 有格式的 | PrintStream | PrintWriter | ||
对象 | ObjectInputStream | ObjectOutputStream | ||
效用 | SequenceInputStream |
译者注:有些地方现在看来仍然不能理解,但Jakob在之后的文章中都有具体的介绍,未完待续。
更多推荐
Java 输入输出流教程(一)(原作:Java IO Tutorial by Jakob Jenkov)
发布评论