Java I/O— 梳理各种“流”
背景
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 = $('
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
Java I/O— 梳理各种“流”的更多相关文章
- Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)
声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- JAVA中的I/O流以及文件操作
一 JAVA语言中主要通过流来完成IO操作. 流:计算机的输入输出之间流动的数据序列,也是类的对象.java中的流方式就像是建立在数据交换源和目的之间的一条通信路径. 数据源:计算机中的数据源是指可以 ...
- JAVA主流日志梳理
JAVA主流日志梳理 引入 历史故事 Log4j - JDK1.3及以前 JUL - JDK1.4 JCL - 日志门面commons-logging的出现 SLF4j - 可能是最好的日志框架 lo ...
- java 文件字节和字符流 缓冲流
流的原理 1) 在 Java 程序中,对于数据的输入/输出操作以“流”(stream) 方式进行:2) J2SDK 提供了各种各样的“流”类,用以获取不同种类的数据:程序中通过标准的方法输入或输出数据 ...
- java入门概念梳理总结
Java入门学习 简介 public class HelloWorld { public static void main(String []args) { System.out.println(&q ...
- java基础11(IO流)-字符流
转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...
- Java基础之I/O流
一.数据流的基本概念 数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.数据写入程序可以是一段.一段地向数据流管道中写入数据, ...
- Java IO---字节流和字符流
一.IO流简介 流 流是一个抽象概念,Java程序和外部设备(可以是硬盘上的文件,也可以是网络设备)之间的输入输出操作是基于流的. 流就好比水管中的水流,具有流入和流出,类比数据的输入和输出. Jav ...
随机推荐
- atitit.集filt经营分部 filter总结
atitit.集filt经营分部 filter总结 1. Css sltr 1 2. 基本选择器(依据id,class,元素名) 2 3. 层次选择器 3 4. 过滤选择器 3 5. First,la ...
- mongdb修改密码
正确做法,利用db.changeUserPassword > db.changeUserPassword('tank2','test');
- 基于visual Studio2013解决C语言竞赛题之1080填运算符
题目 解决代码及点评 /************************************************************************/ /* ...
- poj 3778
这就是个超级水题……!!!!写一写来纪念一下自己的错误…… 如果某个学生的的成绩是其他俩个或三个学生成绩的和则给予奖励 直接暴力,所以一开始直接用数组标记两个人或三个人的和,但是忽略了这种情况 20( ...
- ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题
1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1. sudo ged ...
- fedora 搭建pptp vpn server
1 首先去sourceforge上下载pptpd的源码 http://sourceforge.net/projects/poptop/files/?source=navbar 2 对源码进行编译 ./ ...
- 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改
uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf ...
- KDB支持单步调试功能(ARM架构)
0 实践发现KDB不支持step调试功能 (本文针对的是arm CotexA9架构,各种架构的实现方式不一样, X86的好像已经支持,不过本人没有验证过) 1 首先看下要调试的代码段 ...
- 第十六周oj刷题——Problem J: 填空题:静态成员---计算学生个数
Description 学生类声明已经给出.在主程序中依据输入信息输出实际建立的学生对象个数,以及全部学生对象的成绩总和. Input 学生个数 相应学生个数的学生信息(姓名 年龄 成绩) ...
- Windows DIB文件操作具体解释-5.DIB和调色板
Windows调色板是256色显卡时期的产物,如今显卡最少也是16bit的了.所以调色板基本上是用不到了的. 可是以下几种情况还是须要去使用和了解调色板: 1.在新显卡上保证256色兼容模式的正常执行 ...