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

来源:互联网 发布:mac上的解压缩软件 编辑:程序博客网 时间:2024/05/21 08:52

译者注:作为一个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
InputStreamReaderWriter
OutputStreamWriter数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter文件FileInputStream
RandomAccessFileFileOutputStream
RandomAccessFileFileReaderFileWriter管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter缓存BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter过滤FilterInputStreamFilterOutputStreamFilterReaderFilterWriter解析PushbackInputStream
StreamTokenizer PushbackReader
LineNumberReader 字符串  StringReaderStringWriter数据DataInputStreamDataOutputStream  数据 - 有格式的 PrintStream PrintWriter对象ObjectInputStreamObjectOutputStream  效用SequenceInputStream   



译者注:有些地方现在看来仍然不能理解,但Jakob在之后的文章中都有具体的介绍,未完待续。
原创粉丝点击