背景

  Java核心库java.io它提供了一个综合IO接口。包含:文件读写、标准装备输出等。。Java在IO它是为基础进行输入输出的。全部数据被串行化写入输出流,或者从输入流读入。 —— 百度百科

  Java.io中有非常多类,我们怎样清楚地知道什么时候该用什么类呢?

目标

  本文的目标是梳理java.io中各个类的关系,了解各个类的应用场景。

概念

  数据源数据流目的地

在看关于java io的相关代码时,每次都要问问自己此时这三者各指的是谁。而本文主要是说数据流的。

归类

  按不同分类方法。将各种“流”归入不同的类。

如图所看到的。

  尽管从不同的角度能够将各种各样的“流”分开,可是它们并非各自独立的,会有交叉,就像FileInputStream是输入流。同一时候也是字节流或是节点流。

  区分输入流和输出流,看类的名称中有In,还是Out;或是有R还是W。

区分字节流和字符流,基本上看结尾是Stream还是Reader、Writer。

那怎样区分节点流和处理流,这里就要说说设计模式中的装饰者模式了。

  刚才说了三种分类有交叉,字节流中既有节点流,又有处理流。字符流也是一样。

这里咱们就以字节流为例,来用装饰者模式说明节点流和处理流的关系。

  学习这部分内容时,我们把数据流比作一个管子,假设说节点流是直接连接在数据源或目的地上的管子。那么处理流就是套在管子上的管子,例如以下图所看到的。

 

装饰者模式与Java IO

  装饰者模式就是动态地将责任附加到对象上,扩展对象的行为。

我们能够依据须要在节点流上。用处理流进行一层层的装饰。这样非常灵活。通过组合的方式避免了“类爆炸”。

可是,各种各样的“流”类,也造成了我们使用API的困难。只是明确了装饰者模式,你就能够依据须要随意包装了,也就不乱了。

经常使用类用途

节点流 用途
FileInputStream 从文件读数据
ByteArrayInputStream 从内存中的字节数组读数据

处理流 用途 新增行为/备注
BufferedInputStream 带缓冲区的处理流,避免每读一个字节都要訪问一次硬盘,提高訪问速率,减小对硬盘的伤害 如:readline()
DataInputStream 将字节直接转换成各种基本类型(int,double……)进行读取 如:readdouble()
ObjectInputStream 将字节直接转化成对象进行读取 serializable,transient,externalizable
InputStreamReader 将字节转换成字符进行读取,对于汉字假设按字节读取,读出来后不知道是什么字 ——

总结

  文章并没有列举出java io中全部的输入输出流。重要的是依据上述的归纳总结能够举一反三。融会贯通。详细细节。还要查API文档。

$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('

    ').addClass('pre-numbering').hide();
    $(this).addClass('has-numbering').parent().append($numbering);
    for (i = 1; i ').text(i));
    };
    $numbering.fadeIn(1700);
    });
    });

Java I/O— 梳理各种“流”的更多相关文章

  1. Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

    声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...

  2. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  3. JAVA中的I/O流以及文件操作

    一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以 ...

  4. JAVA主流日志梳理

    JAVA主流日志梳理 引入 历史故事 Log4j - JDK1.3及以前 JUL - JDK1.4 JCL - 日志门面commons-logging的出现 SLF4j - 可能是最好的日志框架 lo ...

  5. java 文件字节和字符流 缓冲流

    流的原理 1) 在 Java 程序中,对于数据的输入/输出操作以“流”(stream) 方式进行:2) J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据 ...

  6. java入门概念梳理总结

    Java入门学习 简介 public class HelloWorld { public static void main(String []args) { System.out.println(&q ...

  7. java基础11(IO流)-字符流

    转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...

  8. Java基础之I/O流

    一.数据流的基本概念 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以是一段.一段地向数据流管道中写入数据, ...

  9. Java IO---字节流和字符流

    一.IO流简介 流 流是一个抽象概念,Java程序和外部设备(可以是硬盘上的文件,也可以是网络设备)之间的输入输出操作是基于流的. 流就好比水管中的水流,具有流入和流出,类比数据的输入和输出. Jav ...

随机推荐

  1. <转载>使CSS文字图片div元素居中方法之水平居中的几个方法

    文字居中,文字垂直居中水平居中,图片居中,图片水平居中垂直居中,块元素垂直居中?当我们在做前端开发是时候关于css居中的问题是很常见的.情 况有很多种,不同的情况又有不同的解决方式.水平居中的方式解决 ...

  2. 熬之滴水成石:最想深入了解的内容--windows内核机制(15)

    66--内存管理(4) 说说在windows中内存空间初始化的事,开始的开始通过处理器的分页机制,预先建立相应足够的页表以便页表来访问物理内存.预先建立的这个物理内存的是windows自己的加载程序, ...

  3. 图片组件——axure线框图部件库介绍

    我们在后面的组件使用中,都统一使用"从部件区域拖拽图片组件到页面区域中" 1. 图片载入 1.1 将图片组件拖拽到页面区域 1.2 双击图片组件 1.3 选择合适图片,点击打开 1 ...

  4. XML 关键字

    SGML--Standard Generalized Marked Language 标准通用标记语言GML--Generalized Marked Language 通用标记语言XML--Extes ...

  5. 正则表达式概述与JAVA中正则表达式的应用

    编程或者电脑使用过程中,经常需要对字符串进行 匹配,查找,替换,判断.如果单纯用代码 if () ,whlie 什么的进行比较复杂麻烦.正则表达式是一种强大灵活的文本处理工具,专门对字符串进行匹配,查 ...

  6. Microsoft office PPT 2007 保存时速度慢(整理自网上)

    问题描述: XP sp3上运行PPT2007,当需要保存文件时,发现竟然需要近1分钟才能保存完毕,其间可能会出现“瘟都死沙漏”来提示你正在保存. 这简直慢到过分慢到无法容忍,一开始以为是ppt文件过大 ...

  7. 【开发手记一】老生常谈:简简单单配置ZED板开发环境

    说明:整理之前项目博客,此系列之前发表于与非网 http://www.openhw.org/module/forum/thread-552476-1-1.html 在拿到开发板和配套教材之前,我们小组 ...

  8. fzu 1911 C. Construct a Matrix

    C. Construct a Matrix Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 32768KB Special Judge ...

  9. Git Hub,eclipse pull 出现问题

    一般在eclise里面使用geithub,之后会出现无法pull,或者pull 报错的问题.这里需要修改本地库的配置文件 The current branch is not configured fo ...

  10. Selenium WebDriver ie,chrome 驱动

    在驱动ie,chrome 的时候需要下载驱动 从网上下载IEDriverServer,Chromedriver 然后需要配置下就可以驱动ie,chrome 浏览器了 selenium 驱动ie 和 c ...