zoukankan      html  css  js  c++  java
  • 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文档。

  • 相关阅读:
    [图解]在输入框和文本框中获取和设置光标位置,以及选中文本和获取选中文本值的方法 --- 详解,兼容所有浏览器。
    关于鼠标事件的screenY,pageY,clientY,layerY,offsetY属性 (详细图解)
    get新技能: 如何设置元素高度与宽度成特定比例。宽度改变,高度自动按比例改变。 例如设置宽高比16:9。
    jQuery源码 Ajax模块分析
    jQuery 1.9 Ajax代码带注释
    html5 自定义数据属性 ,也就是 data-* 自定义属性---笔记。
    client/scroll/offset width/height/top/left ---记第一篇博客
    JSON对象长度和遍历方法
    如何组织css,写出高质量的css代码
    css中文本框与按钮对不齐解决方案
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5028527.html
Copyright © 2011-2022 走看看