您的位置:首页 > 编程语言 > Java开发

Java 输入输出流教程(一)(原作:Java IO Tutorial by Jakob Jenkov)

2013-03-19 16:33 633 查看
译者注:作为一个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

下图表示了,程序从源中读取数据,并将其写入目标当中的过程。



程序在从“源”读取数据时,需要InputStream或者Reader.程序在往“目标”中写数据时,需要OutputStream或者Writer.这同样可以通过图表示为:





所以,InputStream与一个“源”相联系,OutputStream与一个“目标”相联系。我们跟“源”打交道的时候用到InputStream或者Reader,跟“目标”打交道的时候用到“OutputStream"或者"Writer".

2.Java IO的目的和特性

JAVA IO中的类有着不同的作用,可以解决不同的问题,这也就是为什么会有这么多类。这些问题,也就是Java IO类的作用可以总结为以下这些点:

文件存取
网络存取
内存缓存存取
线程间交流管道
缓存
过滤
读写文本
读写基本类型数据(long, int...)
读写对象

这些类的作用最好能够知道,这会使你在阅读Java IO类的时候更加容易理解。

3.Java IO类概览

在讨论完“源”、“目标”、输入、输出以及java IO不同类的不同作用之后,这里将会有一个几乎完整的JAVA IO类的列表,按照输入、输出、基于字符、基于字节、以及其他具体用途进行了分类:
 基于字节基于字符
 输入输出输入输出
基本InputStreamOutputStreamReader

InputStreamReader
Writer

OutputStreamWriter
数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
文件FileInputStream

RandomAccessFile
FileOutputStream

RandomAccessFile
FileReaderFileWriter
管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
缓存BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
过滤FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
解析PushbackInputStream

StreamTokenizer
 PushbackReader

LineNumberReader
 
字符串  StringReaderStringWriter
数据DataInputStreamDataOutputStream  
数据 - 有格式的 PrintStream PrintWriter
对象ObjectInputStreamObjectOutputStream  
效用SequenceInputStream   
译者注:有些地方现在看来仍然不能理解,但Jakob在之后的文章中都有具体的介绍,未完待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java Java IO