译者注:作为一个Java菜鸟,一直对输入输出流表示十分混沌。这个tutorial的出现,让我对Java IO有了一个比较清晰的认识,所以把它翻译在这,作为自己学习的记录,也可以跟大家分享。原文链接:http://tutorials.jenkov.com/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



2.Java IO的目的和特性
- 文件存取
- 网络存取
- 内存缓存存取
- 线程间交流管道
- 缓存
- 过滤
- 读写文本
- 读写基本类型数据(long, int...)
- 读写对象
3.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 |