zoukankan      html  css  js  c++  java
  • java输入流详解

    java输入流详解

    java中提供了很多中输入流对象, 如FileInputStream, BufferedInputStream, InputStreamReader, BufferedReader.很多初学者会被绕的晕头转向.

    其实核心用来读取数据的就是FileInputStream, 其他的都是java对FileInputStream的封装, 体现的是装饰者设计思想.

    FileInputStream

    FileInputStream 字节流: 是真正读取数据的对象, 在读取是只能通过一个字节一个字节的读取, 读取后也会一个字节一个字节的打印在控制台.

    image-20210311122852306

    BufferedInputStream

    FileInputStream读取一个字节就打印一个字节, 频繁操作, 资源消耗比较大, 于是有了BufferedInputStream,.

    BufferedInputStream (字节缓冲流): 任然是一个一个读取字节, 但是会等缓冲区达到限额后一次性输出在控制台. 减少频繁打印的操作.

    InputStream in = new BufferedInputStream(new FileInputStream("path"));
    int i = -1;
    while ( (i = in.read()) != -1 ) {
        println(i);
    }
    

    image-20210311124231623

    InputStreamReader

    无论是InputStream还是BufferedInputStream都是以字节为读取单位的, 很多时候我们读取的内容需要以字符呈现, 以便我们读懂. 所以有InputStreamReader

    InputStreamReader (字符流): 一个一个字节的读取字节, 等到凑够一个字符后, 在进行打印输出.

    因为不同编码的一个字符对应不同个数的字节, 所以需要指定好编码规则

    InputStream in = new InputStreamReader(new FileInputStream("path"), "UTF-8")
    String s = null
    while ( (s = in.readLine()) != null ) {
        System.out.println(i);
    }
    

    image-20210311125121743

    BufferedReaders

    InputStreamReader已字符形式打印出来, 但是也是一个字符一个字符打印, 当我们需要以行读取打印是, 需要继续做一层包装

    BufferedReader(字符缓冲流): 一个字节一个字节的读取, 但是会经过字符流转为字符, 并且在缓冲区中进行缓存, 等满足一定限额后,一行一行的进行打印.

    Reader in = new BufferedReader(
        new InputStreamReader(
             new FileInputStream("path"),
             "UTF-8"
        )
    );
    String s = null;
    while ( (s = in.readLine()) != null ) {
        System.out.println(i);
    }
    

    image-20210311125949936

    衣带渐宽终不悔,为伊消得人憔悴!
  • 相关阅读:
    SVN操作异常
    VS2010安装MVC3
    (转)游戏类型
    (转)32位汇编指令 寄存器
    (转)#pragma 用法
    (转)UI库
    (转)简单实用的网游服务器架构
    (转)一个客户端网游市场分布的数据
    (转)源于魔兽!《植物大战僵尸》成功奥秘
    (转)【分析】中国网游行业上市公司投资分析之网易
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/14517240.html
Copyright © 2011-2022 走看看