• "流"派家族,一脉相承


    (更多内容请关注本人微信订阅号: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

  • 相关阅读:
    常用正则表达式大全
    js基础的自定义属性练习
    AngularJS中最重要的核心功能
    Architecture.the-reactive-manifesto
    iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
    iOS.DistributionApp.1-mobile-provision-file[draft]
    iOS.DistributionApp.0-build-adhoc-distribution-for-tester
    iOS.ReactNative-5-make-react-native-to-support-dynamically-update
    OpenSource.organization-in-github
    iOS.Performance-trick-presentViewController-is-so-slow-in-didSelectRowAtIndexPath
  • 原文地址:https://www.cnblogs.com/mesopotamia/p/5925147.html
Copyright © 2020-2023  润新知