在本文中,我将尝试为您提供Java IO(java.io)包中所有类的概述。 更具体地说,我会根据类的用途进行分组。 这种分组将会使您日后的工作中,进行类的用途判定时或者为某个特定用途选择类时变的更加容易。

阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
七日书摘官方群.jpg

输入和输出-数据源和目标媒介(Input and Output - Source and Destination)

术语"输入"和"输出"有时会令人困惑,一个应用程序的输入往往通常是另外一个应用程序的输出。就像 OutputStream 到底是一个输出被写入的流呢还是输出(供您读取)的流呢?InputStream 到底会不会输出它的数据给读取数据的程序呢?就我个人而言,在我开始学习 Java IO 的时候就感觉到了困惑。(注:输入流可以理解为向内存输入,输出流可以理解为从内存输出)

为了消除这些可能的困惑,我试着给输入和输出起定义一些不一样的别名,尝试将它们从概念上与数据的来源和数据的流向相联系。

Java IO 包主要关注的是从原始数据源读取原始数据以及将原始数据写入目标。以下是最典型的数据源和目标媒介:

  • 文件(Files)
  • 管道(Pipes)
  • 网络连接(Network Connections)
  • 内存缓存(In-memory Buffers (e.g. arrays))
  • Java标准输入、输出、错误输出(System.in, System.out, System.error)

下图是程序从数据源读取数据并将其写入其他目标媒介的原理图:
数据源读取数据写入目标媒介原理图

流(Streams)

在 Java IO 中 Streams 是一个核心概念,Streams 从概念上来说是一个连续的数据流,你可以从 Streams 中读取或向 Streams 中写入数据,Streams 与数据源或者数据流向的媒介相关联。在 Java IO 中的 Streams 既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。

The InputStream, OutputStream, Reader and Writer

程序需要通过 InputStream 或者 Reader 从数据源读取数据,通过 OutputStream 或者 Writer 将数据写入到目标媒介中。如下图所示:
The InputStream, OutputStream, Reader and Writer
InputStream 或者 Reader 和数据源相关联,OutputStream 或者 Writer 和数据目标媒介相关联。

Java IO 的用途和特性(Java IO Purposes and Features)

Java IO 中包含了 InputStream,OutputStream,Reader 和 Writer 类的子类,这些子类各自具有不同的功能,这也就是为什么 Java IO 包中有这么多不同类的缘故。各类用途汇总如下:

  • 文件访问(File Access)
  • 网络访问(Network Access)
  • 内存缓存访问(Internal Memory Buffer Access)
  • 线程内部通信(管道)(Inter-Thread Communication (Pipes))
  • 缓冲(Buffering)
  • 过滤(Filtering)
  • 解析(Parsing)
  • 读写文本(Reading and Writing Text (Readers / Writers))
  • 读写基本类型数据(Reading and Writing Primitive Data (long, int etc.))
  • 读写对象(Reading and Writing Objects)

通读 Java IO 类的源码之后,很容易了解这些类的用途。这些用途或多或少让我们更加容易理解不同的类用于针对不同的业务场景。

Java IO类概述表(Java IO Class Overview Table)

本文已论了数据源、目标媒介、输入、输出和各种不同用途的 Java IO 类,接下来是一张表格,以输入、输出维度和基于字节或者字符、以及其他比如缓冲、解析之类的特定用途划分的大部分 Java IO 类的表格。

Byte Based Character Based
InputOutputInputOutput
BasicInputStreamOutputStreamReader InputStreamReaderWriter OutputStreamWriter
ArraysByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
FilesFileInputStream RandomAccessFileFileOutputStream RandomAccessFileFileReaderFileWriter
PipesPipedInputStreamPipedOutputStreamPipedReaderPipedWriter
BufferingBufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
FilteringFilterInputStreamFilterOutputStreamFilterReaderFilterWriter
ParsingPushbackInputStream StreamTokenizer PushbackReader LineNumberReader
Strings StringReaderStringWriter
DataDataInputStreamDataOutputStream
Data - Formatted PrintStream PrintWriter
ObjectsObjectInputStreamObjectOutputStream
UtilitiesSequenceInputStream

英文原文链接:http://tutorials.jenkov.com/java-io/overview.html

------完------

推荐阅读:

Java NIO 简明教程

更多学习讨论欢迎关注公众号:
qrcode_for_gh_36ba5cb42130_258.jpg

参考资料:
https://blog.csdn.net/i_am_kop/article/details/78513802
http://ifeve.com/java-io-3/