• 第十周课程总结


    流的概念

    流是个抽象的概念,是对输入输出设备的抽象,输入流可以看作一个输入通道,输出流可以看作一个输出通道。
    输入流是相对程序而言的,外部传入数据给程序需要借助输入流。
    输出流是相对程序而言的,程序把数据传输到外部需要借助输出流。
    

    字节流

    什么是字节流?
    字节流--传输过程中,传输数据的最基本单位是字节的流。
    什么是字符流?
    字符流--传输过程中,传输数据的最基本单位是字符的流。
    读数据的时候,如果我们需要去“看数据”,那么字节流的数据需要指定字符编码方式,这样我们才能看到我们能识别的字符;而字符流,因为已经选择好了字符编码方式,通常不需要再改了(除非定义的字符编码方式与数据原有的编码方式不一致!)
    

    常用字节输入流

    常用的字节输入流主要有:

    InputStream  
    FileInputStream
    BufferedInputStream 【BufferedInputStream不是InputStream的直接实现子类,是FilterInputStream的子类】
    

    Outputstream的使用方法

    常用字节输出流

    OutputStream
    FileOutputStream
    BufferedOutputStream 【BufferedOutputStream不是OutputStream的直接实现子类,是FilterOutputStream的子类】
    

    使用方法

    字符流的输入流

    Reader
    InputStreamReader
    FileReader
    BufferedReader
    
    Reader是字符输入流的抽象基类 ,它定义了以下几个函数:
    read() :读取单个字符,返回结果是一个int,需要转成char;到达流的末尾时,返回-1
    read(char[] cbuf):读取cbuf的长度个字符到cbuf这种,返回结果是读取的字符数,到达流的末尾时,返回-1
    close()  :关闭流,释放占用的系统资源。
    InputStreamReader 可以把InputStream中的字节数据流根据字符编码方式转成字符数据流。它除了可以使用基类定义的函数,它自己还实现了以下函数:
    read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
    FileReader 可以把FileInputStream中的字节数据转成根据字符编码方式转成字符数据流。
    BufferedReader可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它除了可以使用基类定义的函数,它自己还实现了以下函数:
    read(char[] cbuf, int offset, int length) :从offset位置开始,读取length个字符到cbuf中,返回结果是实际读取的字符数,到达流的末尾时,返回-1
    readLine() :读取一个文本行,以行结束符作为末尾,返回结果是读取的字符串。如果已到达流末尾,则返回 null
    

    字符流的输出流

    Writer
    OutputStreamWriter
    FileWriter
    BufferedWriter
    
    Writer是字符输出流的抽象基类, ,它定义了以下几个函数
    write(char[] cbuf) :往输出流写入一个字符数组。
    write(int c) :往输出流写入一个字符。
    write(String str) :往输出流写入一串字符串。
    write(String str, int off, int len) :往输出流写入字符串的一部分。
    close() :关闭流,释放资源。 【这个还是抽象的,写出来是说明有这个关闭功能】
    flush():刷新输出流,把数据马上写到输出流中。 【这个还是抽象的,写出来是说明有这个关闭功能】
    OutputStreamWriter可以使我们直接往流中写字符串数据,它里面会帮我们根据字符编码方式来把字符数据转成字节数据再写给输出流,它相当于一个中介桥梁。
    FileWriter与OutputStreamWriter功能类似,我们可以直接往流中写字符串数据,FileWriter内部会根据字符编码方式来把字符数据转成字节数据再写给输出流。
    BufferedWriter比FileWriter还高级一点,它利用了缓冲区来提高写的效率。它还多出了一个函数:
    newLine() :写入一个换行符
    

    转换流

    OutputStreamWriter:是Writer的子类。将输出的字符流变成字节流:即将字符流的输入对象变成字节流输入对象。
    InputStreamReader:是Reader的子类。将输入的字节流变成字符流,即将一个字节流的输入对象变成字符流输入对象。
    

    特别注意:不管如何,虽然是以字符的输出流形式,操作字节流输出流,但是实际上还是以字节的形式输出。

    而字符的输入流虽然是以字符的形式操作,但是还是使用了字节流,也就是说,在传输或者从文件读取数据的时候,文件里真正保存的数据永远是字节。

    内部操作流

    ByteArrayInputStream的用法

    管道流

    先建立输出管道,再建立输入管道

    打印流

    部分资料来自
    https://www.cnblogs.com/progor/p/9357676.html

  • 相关阅读:
    数据库-第七章 数据库设计-7.4 逻辑结构设计
    ArrayList 一个面试题
    java 锁
    IDEA 通过插件jetty-maven-plugin使用 jetty
    Mybatis主线流程源码解析
    Springboot 报找不到对应的Mapper接口或RPC接口等问题
    Springboot启动报Multiple Dockets with the same group name are not supported. The following duplicate groups were discovered.
    Exception和Error有什么区别?
    谈谈对Java平台的理解笔记
    Spring事务控制
  • 原文地址:https://www.cnblogs.com/ydlBLOG/p/11785846.html
Copyright © 2020-2023  润新知