zoukankan      html  css  js  c++  java
  • InputStreamReader和BufferedReader的区别

    .InputStream、OutputStream

    处理字节流的抽象类

    InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.

    OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.

    2.InputStreamReader  OutputStreamWriter

    处理字符流的抽象类

    InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.

    OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

    3.BufferedReader BufferedWriter

    BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,

    从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

    BufferedWriter  由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,

    将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

    InputStream能从來源处读取一個一個byte,
    所以它是最低级的,
     

    InputStreamReader
     InputStreamReader封裝了InputStream在里头,
     它以较高级的方式,一次读取一个一个字符,

    BufferedReader

    BufferedReader则是比InputStreamReader更高级,
    它封裝了StreamReader类,
    一次读取取一行的字符

     1 import java.io.*;     
     2 public class Main {     
     3     public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {     
     4                      
     5             FileInputStream fis=new FileInputStream("d://desktop//test.txt");     
     6                  
     7             try {     
     8                 InputStreamReader isr=new InputStreamReader(fis,"utf8");                     
     9                 BufferedReader br=new BufferedReader(isr);     
    10                      
    11                 String line;     
    12                 while((line=br.readLine()) != null){     
    13                     System.out.println(line);     
    14                 }     
    15             } catch (Exception e) {     
    16                 // TODO Auto-generated catch block     
    17                 e.printStackTrace();     
    18             }                                            
    19                      
    20     }     
    21 }
     1 public String getRequestStr(HttpServletRequest request) {
     2         StringBuilder str = new StringBuilder();
     3         BufferedReader bufferedReader = null;
     4         InputStreamReader inputStreamReader = null;
     5         try {
     6             inputStreamReader = new InputStreamReader(request.getInputStream(), "UTF-8");
     7             bufferedReader = new BufferedReader(inputStreamReader);
     8             String line = null;
     9             while ((line = bufferedReader.readLine()) != null) {
    10                 str.append(line);
    11             }
    12             logger.info("读取request文件流信息:" + str);
    13         } catch (Exception e) {
    14             logger.error("读取request文件流信息异常:" + e.getMessage());
    15         } finally {
    16             if (null != bufferedReader) {
    17                 try {
    18                     bufferedReader.close();
    19                 } catch (IOException e) {
    20                     logger.error(e.getMessage());
    21                 }
    22             }
    23             if (null != inputStreamReader) {
    24                 try {
    25                     inputStreamReader.close();
    26                 } catch (IOException e) {
    27                     logger.error(e.getMessage());
    28                 }
    29             }
    30         }
    31         return str.toString();
    32     }
    • 总结

    在读取网络数据流的时候,可以通过先用InputStream获取字节流、InputStreamReader将字节流转化成字符流、BufferedReader将字符流以缓存形式输出的方式来快速获取网络数据流。

    获取字符流后,可直接缓存,然后从缓存区取出,这时的速度比InputStreamReader又将快上很多。

  • 相关阅读:
    怎么判断自己在不在一家好公司?
    超全!互联网大厂的薪资和职级一览
    Nginx 又一牛 X 功能!流量拷贝
    时间管理之四象限法则
    罗永浩一个坑位卖60万脏钱背后:放下面子赚钱,才是成年人最大的体面
    2020 年 4月全国程序员工资出炉
    一次 SQL 查询优化原理分析(900W+ 数据,从 17s 到 300ms)
    “Hey Siri” 背后的黑科技大揭秘!
    一文讲透高薪的本质!
    python UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 87: illegal multibyte sequence异常解决
  • 原文地址:https://www.cnblogs.com/shenjiangwei/p/8930585.html
Copyright © 2011-2022 走看看