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文档。

  • 相关阅读:
    Hihocoder 1275 扫地机器人 计算几何
    CodeForces 771C Bear and Tree Jumps 树形DP
    CodeForces 778D Parquet Re-laying 构造
    CodeForces 785E Anton and Permutation 分块
    CodeForces 785D Anton and School
    CodeForces 785C Anton and Fairy Tale 二分
    Hexo Next 接入 google AdSense 广告
    如何统计 Hexo 网站的访问地区和IP
    Design and Implementation of Global Path Planning System for Unmanned Surface Vehicle among Multiple Task Points
    通过ODBC接口访问人大金仓数据库
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5028527.html
Copyright © 2011-2022 走看看