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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM