(更多内容请关注本人微信订阅号:it_pupil)

你没进错,我们讲的是Java的输入输出流。

概述

➤   可以从其中读入一个字节序列的对象称作输入流。(输入流是一个对象,可以从这个对象中读取一个字节序列。)

➤    可以向其中写入一个字节序列的对象称作输出流。

➤    读入或者写入的字节序列当然有个来源地和目的地(输入流从哪里读取字节序列的,输入流把字节序列写入到哪里去?),这个来源地和目的地可以是文件(通常)、网络链接,内存块等。

➤    抽象类InputStream和OutputStream是输入输出流层次结构的基础(祖宗)。


➤    从上面看出,输入输出流以字节为单位,那么,它们就不方便处理以Unicode形式存储的信息(用两个字节来编码一个字符。),所以,从抽象类Reader和Writer中又继承出来一个层次架构,专门处理这种Unicode字符。这些类的读入与写出是基于两字节码元的,而不是单字节字符。

读写字节

➤    InputStream只有一个抽象的读方法:abstract int read();

➤    设计具体的输入流,必须覆盖read()方法。比如:FileInputStream覆盖read()增加了功能:从文件中读字节。

➤    InputStream还有若干个非抽象的方法,比如,读入一个字节数组啊,跳过大量的字节再开始读入啊等,而这些方法都调用了抽象的read()方法,所以,各个子类只需要覆盖read()方法。

➤    与InputSDtream类似,OutputStream定义了抽象写方法:abstract void write(int b);

➤    完成读写后,要调用close方法关闭流,释放资源。

➤    read和write方法操作时都将被阻塞(线程安全),直至字节确实被读入或者写出,可以用available方法事先检查可读入的字节数量。

➤    close在关闭流的同时,还会把输出缓冲区的字符全部全部强制推出去。如果不关闭,那么缓冲区的最后留下的数据可能永远不会传送出去了。

➤    可以用flush()方法强制把缓冲区的数据冲刷出去。

 

完整的流家族

➤    读写单个字节或字节数组:InputStream和OutputStream。

➤    读写字符串和数字:扩展InputStream和OutputStream,生成丰富的子类,如:

DataInputStream和DataOutputStream:以二进制格式读写所有的Java基本类型。

ZipInputStream,ZipOutputStream:读写Zip文件。

➤    上面不论是祖宗还是子孙,均以字节或者字节数组为读取目标。读取Unicode文本呢(以双字节为码元):使用Reader和Writer的子类。

 

组合流过滤器

➤    FileInputStream可以按字节读取文件中的数据,但是没法读取数值类型。

➤   DataInputStream可以读入数值类型(readDouble()等),但是它不能从文件中读取数据啊。

➤    那么我现在想从文件中读入数字,怎么破?那就套一层:


➤    我不但要从文件中读入数字,我还要在读取过程中利用缓冲区缓存数据,怎么破?那就继续套:


➤    上面的一层套一层的方式,其实是Java经典的设计模式:装饰者模式的应用:


原文链接:

http://mp.weixin.qq.com/s?__biz=MzIyNzUzNjQ3MA==&mid=2247483849&idx=1&sn=656bf330b2851fa301efcff257a1222f&scene=21#wechat_redirect

"流"派家族,一脉相承的更多相关文章

  1. .NET中的流

    当应用程序需要和磁盘上的文件打交道的时候,就有了流的概念.流就像架设在应用程序所在内存和磁盘之间的一个管道. 大致思路 → 建立管道 //FileMode.Open打开现有文件,另外还有FileMod ...

  2. 《Java核心技术卷二》笔记(一)流与文件

    一.流的概念 在Java中,可以提供字节序列的对象,或者可以接收字节序列的对象,都可以抽象成流.系统中的文件,网络,内存这些设备都可以读入或者写入字节,自然也可以用流的方式来操作.能向程序中提供字节序 ...

  3. Java IO流以及装饰器模式在其上的运用

    流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输 ...

  4. Java开发笔记(九十一)IO流处理简单的数据压缩

    前面介绍的文件I/O,不管是写入文本还是写入对象,文件中的数据基本是原来的模样,用记事本之类的文本编辑软件都能浏览个大概.这么存储数据,要说方便确实方便,只是不够经济划算,原因有二:其一,写入的数据可 ...

  5. Java基础之详谈IO流

    Java基础知识.IO流详细讲解.你所要的IO这里都有

  6. JAVA核心技术第二卷 第一章

    流的家族:

  7. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  8. IO流-概览

    一. 抽象类InputStream和OutputStream构成了了IO类的基础 因为面向字节流的对象不便于处理Unicode形式储存的信息,所以从抽象类Reader和Writer中继承出专门用于处理 ...

  9. JAVA基础知识之IO——IO流(Stream)的概念

    Java IO 流 Java将不同的设备或载体(键盘.文件.网络.管道等)的输入输出数据统称为"流"(Stream),即JAVA的IO都是基于流的. JAVA传统的所有流类型类都包 ...

随机推荐

  1. linux 挂载光盘:mount: you must specify the filesystem type

    尝试挂载光盘镜像时出现mount: you must specify the filesystem type 使用-t auto -t iso9660 或不加参数都搞不定,最后在以下链接找到解决办法: ...

  2. 公告栏放honehoneclock和喂小老鼠flash

    如果你想要放flash在公告栏,像很火的honehoneclock,就要向管理员发邮件申请js权限啦啦啦~~~~~~~Email地址:博客园 <contact@cnblogs.com> 申 ...

  3. Python中文乱码

    1,注意:请使用智慧型浏览器 "CHROME" 配合理解和运作本文中提到的程序. 2,提示:谷歌的CHROME浏览器是迄今为止最智慧的浏览器,没有之一,只有第一. 3,谷歌的CHR ...

  4. rpm 软件安装

    安装 vi 软件 rpm q查询 a全部软件 e 卸载 i 安装 v 显示进度 h 以#显示 首先确定软件时候安装 rpm 实现软件的安装 卸载 升级 查询等 1)查询是否已经安装过 rpm -qa ...

  5. LINUX磁盘分区、格式化、挂载、卸载全程详解

    1.一切皆文件 Linux系统有一个理念:“一切皆文件”,所以计算机的硬件在linux中也是以“文件”的形式存在于/dev目录中.   图为CentOS 6.5系统中/dev目录的部分内容.不同的计算 ...

  6. 荣品RP4412开发板烧写Ubuntu系统应注意SD卡内存大些

    问:RP4412开发板用SD卡烧写光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化, 利用usb来升级啊, 也有文档,看升级文档. 问: 这个是怎么回事? 答:你是升级什么系统? ...

  7. Ajax实现原理

    Ajax的工作 Ajax直觉认识:我们发送一个请求,但是这个请求比较特殊它是异步的,也就是说客户端是不会感觉到的.在发送这个请求的时候我们绑定了一个事件,这个事件会监控我们发送请求的状态,并且每次状态 ...

  8. USACO 2014 JAN 滑雪录像

    2. 滑雪录像{silver题3} [问题描述] 冬奥会的电视时刻表包含N (1 <= N <= 150)个节目,每个节目都有开始和结束时间.农民约翰有两台录像机,请计算他最多可以录制多少 ...

  9. 计算机网络(9)-----TCP可靠传输的实现

    TCP可靠传输的实现 以字节为单位的滑动窗口 滑动窗口的滑动是以字节为单位的,发送方A和接收方B在TCP三次握手的前两次握手时协商好了发送窗口和接受窗口的大小,发送方A根据B发送来的确认连接报文中标明 ...

  10. excel导出

    查询的结果结 List list  = commissionMService.getMapper().meishengExport(paramMap); // 第一步,创建一个webbook,对应一个 ...