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又将快上很多。

posted @ 2018-04-24 14:57  Johnson718  阅读(3750)  评论(0编辑  收藏  举报