(更多内容请关注本人微信订阅号: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命令格式及基础命令(一)

    linux命令格式 ~]#COMMAND [选项] [参数] 例如: ~]#ls 不带任何选项和参数 ``` stylus ~]#ls -lh /etc 列出/etc下所有文件和目录,同时要求以格式和 ...

  2. z-index深入理解

    [CSS深入理解之z-index]听课总结 (http://www.imooc.com/learn/643)   一.z-index基础知识 1.z-index的含义 z-index属性指定了元素及其 ...

  3. 实现View的移动的方法总结

    btw:这篇博客的内容其实算是<Android开发艺术探索>的一篇读书笔记,在书本的知识上加了一点自己的理解,并用自己的话描述出来.<Android开发艺术探索>是一本不错的书 ...

  4. LoadRunner ERROR:Could not call flex.messaging.io.amf.ASObject.readObject() : Cannot parse date.

    Error: Encoding of AMF message failed. Error is : Exception Occurred while invoking WriteObject meth ...

  5. 转载:《TypeScript 中文入门教程》

    缘由 事情是这样的,我想搜索 TypeScript 中文教程,结果在 https://www.baidu.com , https://cn.bing.com ,上都找不到官方的翻译,也没有一个像样的翻 ...

  6. C++11 智能指针

    C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针 ...

  7. qt 设置

    右击不同类型的文件,点属性,可以选择处理文件的工具,比如自动生成uic qrc右击工程属性,然后可以转换成QT工程翻译文件如果只读的话,可以右击换一个编辑器打开 如果翻译文件只读的话,必须直接使用字符 ...

  8. WebAPI返回数据类型解惑

    本文来自:http://www.cnblogs.com/lzrabbit/archive/2013/03/19/2948522.html 最近开始使用WebAPI,上手很容易,然后有些疑惑 1.Web ...

  9. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  10. Mongodb 故障分享 初始化时"errmsg" : "exception: new file allocation failure" 并且长时间处于STARTUP2

    Hello,大家下午好. 近几天的项目有点赶,所以耽误了更新.现在给大家分享下,在安装mongodb的过程中,遇到的故障一则.其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了很多时间,跟大家分 ...