java io 系列目录如下:

01. java io系列01之  "目录"

02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

03. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

04. java io系列04之 管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例

05. java io系列05之 ObjectInputStream 和 ObjectOutputStream

06. java io系列06之 序列化总结(Serializable 和 Externalizable)

07. java io系列07之 FileInputStream和FileOutputStream

08. java io系列08之 File总结

09. java io系列09之 FileDescriptor总结

10. java io系列10之 FilterInputStream

11. java io系列11之 FilterOutputStream

12. java io系列12之 BufferedInputStream(缓冲输入流)的认知、源码和示例

13. java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例

14. java io系列14之 DataInputStream(数据输入流)的认知、源码和示例

15. java io系列15之 DataOutputStream(数据输出流)的认知、源码和示例

16. java io系列16之 PrintStream(打印输出流)详解

17. java io系列17之 System.out.println("hello world")原理

18. java io系列18之 CharArrayReader(字符数组输入流)

19. java io系列19之 CharArrayWriter(字符数组输出流)

20. java io系列20之 PipedReader和PipedWriter

21. java io系列21之 InputStreamReader和OutputStreamWriter

22. java io系列22之 FileReader和FileWriter 

23. java io系列23之 BufferedReader(字符缓冲输入流)

24. java io系列24之 BufferedWriter(字符缓冲输出流)

25. java io系列25之 PrintWriter (字符打印输出流)

26. java io系列26之 RandomAccessFile

前言

关于java的io部分,以前学习过。当时学习的节奏是,首先了解io的相关介绍,再查看io的使用示例,最后才是打开API参考文档并参考文档通过写demo来学习。结果,当时是了解了API的使用方法;可是一段时间之后,只能零零碎碎的记得一些片段,再要自己讲出个所以然来,已经非常之艰难。之所以造成这种困境,我想主要是:一,学习的时候,理解的不够彻底,没有真正理解它的思想和框架。二,加之后来使用的较少,加速了遗忘的速度。在这里面,最根本的问题还是理解,使用的目的也是为了更加深入的理解。
最近,抽空整理以前所学的java基础。整理也就是重新学习的过程,在这个学习过程中,我一直尝试着站在一个更高的角度来看问题,将这些类和接口的原理和思想理解的更加透彻一些!在这里,将所学的东西分享出来,一是共同提高;再者,有不足的地方或好的建议,还希望各位读者能指出。谢谢!

转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_01.html

java io简介

java io系统的设计初衷,就是为了实现“文件、控制台、网络设备”这些io设置的通信。例如,对于一个文件,我们可以打开文件,然后进行读取和写入。
在java 1.0中,java提供的类都是以字节(byte)为单位,例如,FileInputStream和FileOutputStream。而到了java 1.1,为了与国际化进行接轨,在java io中添加了许多以字符(Unicode)为单位进行操作的类。

在java io的称呼中,我们经常会提到“输入流”、“输出流”等等概念。首先,什么是流呢?
所谓“流”,就是一种抽象的数据的总称,它的本质是能够进行传输。
      a) 按照“流”的数据流向,可以将其化分为:输入流输出流
      b) 按照“流”中处理数据的单位,可以将其区分为:字节流字符流。在java中,字节是占1个Byte,即8位;而字符是占2个Byte,即16位。而且,需要注意的是,java的字节是有符号类型,而字符是无符号类型!

java io框架

有了上面的基本概念之后,我们看看java io的框架。

1. 以字节为单位的输入流的框架图

下面,是以字节为单位的输入流的框架图。

从中,我们可以看出。
(01) InputStream 是以字节为单位的输入流的超类。InputStream提供了read()接口从输入流中读取字节数据。
(02) ByteArrayInputStream 是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
(03) PipedInputStream 是管道输入流,它和PipedOutputStream一起使用,能实现多线程间的管道通信。
(04) FilterInputStream 是过滤输入流。它是DataInputStream和BufferedInputStream的超类。
(05) DataInputStream 是数据输入流。它是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
(06) BufferedInputStream 是缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(07) File 是“文件”和“目录路径名”的抽象表示形式。关于File,注意两点:
a), File不仅仅只是表示文件,它也可以表示目录!
b), File虽然在io保重定义,但是它的超类是Object,而不是InputStream。
(08) FileDescriptor 是“文件描述符”。它可以被用来表示开放文件、开放套接字等。
(09) FileInputStream 是文件输入流。它通常用于对文件进行读取操作。
(10) ObjectInputStream 是对象输入流。它和ObjectOutputStream一起,用来提供对“基本数据或对象”的持久存储。

2. 以字节为单位的输出流的框架图

下面,是以字节为单位的输出流的框架图。

从中,我们可以看出。以字节为单位的输出流的公共父类是OutputStream。
(01) OutputStream 是以字节为单位的输出流的超类。OutputStream提供了write()接口从输出流中读取字节数据。
(02) ByteArrayOutputStream 是字节数组输出流。写入ByteArrayOutputStream的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
(03) PipedOutputStream 是管道输出流,它和PipedInputStream一起使用,能实现多线程间的管道通信。
(04) FilterOutputStream 是过滤输出流。它是DataOutputStream,BufferedOutputStream和PrintStream的超类。
(05) DataOutputStream 是数据输出流。它是用来装饰其它输出流,它“允许应用程序以与机器无关方式向底层写入基本 Java 数据类型”。
(06) BufferedOutputStream 是缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
(07) PrintStream 是打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。
(08) FileOutputStream 是文件输出流。它通常用于向文件进行写入操作。
(09) ObjectOutputStream 是对象输出流。它和ObjectInputStream一起,用来提供对“基本数据或对象”的持久存储。

3. 以字节为单位的输入流和输出流关联的框架图

输入流和输出流都有对应的关系,下面是将以字节为单位的输入流和输出流关联起来的图片。

4. 以字符为单位的输入流的框架图

下面,是以字符为单位的输入流的框架图。

从中,我们可以看出。以字符为单位的输入流的公共父类是Reader。
(01) Reader 是以字符为单位的输入流的超类。它提供了read()接口来取字符数据。
(02) CharArrayReader 是字符数组输入流。它用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!
(03) PipedReader 是字符类型的管道输入流。它和PipedWriter一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedReader配套使用。
(04) FilterReader 是字符类型的过滤输入流。
(05) BufferedReader 是字符缓冲输入流。它的作用是为另一个输入流添加缓冲功能。
(06) InputStreamReader 是字节转字符的输入流。它是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
(07) FileReader 是字符类型的文件输入流。它通常用于对文件进行读取操作。

5. 以字符为单位的输出流的框架图

下面,是以字符为单位的输出流的框架图。

(01) Writer 是以字符为单位的输出流的超类。它提供了write()接口往其中写入数据。
(02) CharArrayWriter 是字符数组输出流。它用于读取字符数组,它继承于Writer。操作的数据是以字符为单位!
(03) PipedWriter 是字符类型的管道输出流。它和PipedReader一起是可以通过管道进行线程间的通讯。在使用管道通信时,必须将PipedWriter和PipedWriter配套使用。
(04) FilterWriter 是字符类型的过滤输出流。
(05) BufferedWriter 是字符缓冲输出流。它的作用是为另一个输出流添加缓冲功能。
(06) OutputStreamWriter 是字节转字符的输出流。它是字节流通向字符流的桥梁:它使用指定的 charset 将字节转换为字符并写入。
(07) FileWriter 是字符类型的文件输出流。它通常用于对文件进行读取操作。
(08) PrintWriter 是字符类型的打印输出流。它是用来装饰其它输出流,能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。

6. 以字符为单位的输入流和输出流关联的框架图

下面是将以字符为单位的输入流和输出流关联起来的图片。

7. 字节转换为字符流的框架图

在java中,字节流能转换为字符流,下面是它们的转换关系图。

从中,我们可以看出。
(01) FileReader继承于InputStreamReader,而InputStreamReader依赖于InputStream。具体表现在InputStreamReader的构造函数是以InputStream为参数。我们传入InputStream,在InputStreamReader内部通过转码,将字节转换成字符。
(02) FileWriter继承于OutputStreamWriter,而OutputStreamWriter依赖于OutputStream。具体表现在OutputStreamWriter的构造函数是以OutputStream为参数。我们传入OutputStream,在OutputStreamWriter内部通过转码,将字节转换成字符。

8. 字节和字符的输入流对应关系

9. 字节和字符的输出流对应关系

认识了java io的总体框架之后。接下来,我们可以开始对其中的各个类进入学习,包括“它的作用和用法,源码的探索”等方面。


更多内容

01. java 集合系列目录(Category)

java io系列01之 "目录"的更多相关文章

  1. Java IO系列之一:IO

    1. 概述 Java IO一般包含两个部分: 1.java.io包中堵塞型IO: 2.java.nio包中的非堵塞型IO,通常称为New IO. java.io包下,分为四大块近80个类: 1.基于字 ...

  2. java io系列20之 PipedReader和PipedWriter

    本章,我们学习PipedReader和PipedWriter.它们和“PipedInputStream和PipedOutputStream”一样,都可以用于管道通信. PipedWriter 是字符管 ...

  3. java io系列21之 InputStreamReader和OutputStreamWriter

    InputStreamReader和OutputStreamWriter 是字节流通向字符流的桥梁:它使用指定的 charset 读写字节并将其解码为字符.InputStreamReader 的作用是 ...

  4. java io系列22之 FileReader和FileWriter

    FileReader 是用于读取字符流的类,它继承于InputStreamReader.要读取原始字节流,请考虑使用 FileInputStream.FileWriter 是用于写入字符流的类,它继承 ...

  5. java io系列23之 BufferedReader(字符缓冲输入流)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_23.html 更多内容请参考:java io系列01之 "目录" Buffere ...

  6. java io系列24之 BufferedWriter(字符缓冲输出流)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_24.html 更多内容请参考:java io系列01之 "目录" Buffere ...

  7. java io系列25之 PrintWriter (字符打印输出流)

    更多内容请参考:java io系列01之 "目录" PrintWriter 介绍 PrintWriter 是字符类型的打印输出流,它继承于Writer.PrintStream 用于 ...

  8. java io系列26之 RandomAccessFile

    本文主要介绍 RandomAccessFile. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_26.html 更多内容请参考:java io系列0 ...

  9. java io系列

    java io系列01之 "目录" java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) java io系列03之 ...

随机推荐

  1. hdu1879 继续畅通工程

    http://acm.hdu.edu.cn/showproblem.php?pid=1879 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  2. Html+css 练习写页面发现的错误及解决办法。

    最近开始模仿写一些静态页面,今天模仿的是中华咨询网.写了一个简单的js(功能:当鼠标hover一级菜单的时候,设置二级菜单为显示,当鼠标hover二级菜单的选项时候,二级菜单不收回.当鼠标移出菜单一级 ...

  3. 12套swift学习资源分享

    虽然objective-c编程语言在过去很长一段时间都是iOS应用开发的基础语言,且很多iOS开发者对其也深爱有佳,但是随着swift编程语言的问世,迅速发展为开发者追捧的语言.且今年伴随着swift ...

  4. 淘宝开放平台TOP测试环境

    沙箱测试环境 淘宝沙箱环境是淘宝开放平台(TOP)提供给独立软件开发商(ISV)的测试环境.数据完全独立,大部分API已经部署到该环境中供ISV进行API的功能测试,对与APP的调用量无限制,但获取大 ...

  5. Asp.net WebApi + EF 单元测试架构 DbContext一站到底

    其实关于webapi和Ef service的单元测试我以前已经写过相关文章,大家可以参考: Asp.net WebAPI 单元测试 单元测试 mock EF 中DbContext 和DbSet Inc ...

  6. 努力学习 HTML5 (3)—— 改造传统的 HTML 页面

    要了解和熟悉 HTML5 中的新的语义元素,最好的方式就是拿一经典的 HTML 文档作例子,然后把 HTML5 的一些新鲜营养充实进入.如下就是我们要改造的页面,该页面很简单,只包含一篇文章. Apo ...

  7. MiniDao-PE精简版

    https://github.com/zhangdaiscott/minidao-pe MiniDao-PE精简版 MiniDao-PE 简介及特征 MiniDao-PE 是一种持久化解决方案,类似m ...

  8. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]

    使用MySQL Migration Toolkit快速将Oracle数据导入MySQL上来先说点废话本人最近在学习一些数据库方面的知识,之前接触过Oracle和MySQL,最近又很流行MongoDB非 ...

  9. ubuntu下取代ping的好工具tcpping

    $ sudo apt-get install tcptraceroute bc$ cd /usr/bin$ sudo wget http://www.vdberg.org/~richard/tcppi ...

  10. [GraphQL] Use GraphQL's Object Type for Basic Types

    We can create the most basic components of our GraphQL Schema using GraphQL's Object Types. These ty ...