最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

InputStreamReader 和FileReader的區(qū)別及InputStream和Reader的區(qū)別

 更新時間:2015年12月22日 09:40:10   投稿:mrr  
這篇文章主要介紹了InputStreamReader 和FileReader的區(qū)別及InputStream和Reader的區(qū)別的相關(guān)資料,需要的朋友可以參考下

首先給大家介紹InputStreamReader 和FileReader的區(qū)別,具體內(nèi)容如下所示:

InputStreamReader 和 BufferedReader 。其中最重要的類是 InputStreamReader ,它是字節(jié)轉(zhuǎn)換為字符的橋梁。 你可以在構(gòu)造器重指定編碼的方式,如果不指定的話將采用底層操作系統(tǒng)的默認編碼方式,例如 GBK 等。

FileReader 與 InputStreamReader 涉及編碼轉(zhuǎn)換 ( 指定編碼方式或者采用 os 默認編碼 ) ,可能在不同的平臺上出現(xiàn)亂碼現(xiàn)象!而 FileInputStream 以二進制方式處理,不會出現(xiàn)亂碼現(xiàn)象 .

FileInputStream字節(jié)流是 以一個一個字節(jié)來讀。

FileReader字符流是 以一個一個字符來讀取的。

BufferedReader bufReader = null;
InputStreamReader isr = null;
FileReader fr = null;
try {
for(String fileName:fileNames){
  方法一:
  isr = new InputStreamReader(new FileInputStream("D:\test.txt"), "utf-8");
  bufReader = new BufferedReader(isr);
  方法二:
  fr = new FileReader("D:\test.txt");
  bufReader = new BufferedReader(fr);
  while (bufReader.ready()) {
   // 1. 得到每一行數(shù)據(jù) 
   String dataLine = bufReader.readLine();
   }
}

InputStream和Reader的區(qū)別

java.io下面有兩個抽象類:InputStream和Reader

InputStream是表示字節(jié)輸入流的所有類的超類

Reader是用于讀取字符流的抽象類

InputStream提供的是字節(jié)流的讀取,而非文本讀取,這是和Reader類的根本區(qū)別。

即用Reader讀取出來的是char數(shù)組或者String ,使用InputStream讀取出來的是byte數(shù)組。

弄清了兩個超類的根本區(qū)別,再來看他們底下子類的使用,這里只對最常用的幾個說明

InputStream
   | __FileInputStream

FileInputStream 從文件系統(tǒng)中的某個文件中獲得輸入字節(jié)。

構(gòu)造方法摘要 

FileInputStream (File  file) 

          通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件通過文件系統(tǒng)中的 File 對象 file 指定。

FileInputStream (FileDescriptor  fdObj)

          通過使用文件描述符 fdObj 創(chuàng)建一個 FileInputStream ,該文件描述符表示到文件系統(tǒng)中某個實際文件的現(xiàn)有連接。

FileInputStream (String  name) 

          通過打開一個到實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件通過文件系統(tǒng)中的路徑名 name 指定。 

Reader

   |——BufferedReader
   |___InputStreamReader
         |__FileReader

BufferedReader : 從字符輸入流中讀取文本,緩沖各個字符,從而實現(xiàn)字符、數(shù)組和行的高效讀取。

構(gòu)造方法摘要 

BufferedReader (Reader  in)

          創(chuàng)建一個使用默認大小輸入緩沖區(qū)的緩沖字符輸入流。

BufferedReader (Reader  in, int sz)

          創(chuàng)建一個使用指定大小輸入緩沖區(qū)的緩沖字符輸入流。

BufferedReader (Java Platform SE 6)

BufferedReader的最大特點就是緩沖區(qū)的設(shè)置。通常Reader 所作的每個讀取請求都會導(dǎo)致對底層字符或字節(jié)流進行相應(yīng)的讀取請求,如果沒有緩沖,則每次調(diào)用 read() 或 readLine() 都會導(dǎo)致從文件中讀取字節(jié),并將其轉(zhuǎn)換為字符后返回,而這是極其低效的。

使用BufferedReader可以指定緩沖區(qū)的大小,或者可使用默認的大小。大多數(shù)情況下,默認值就足夠大了。

因此,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和InputStreamReader)。

例如,

 BufferedReader in
  = new BufferedReader(new FileReader("foo.in"));

 將緩沖指定文件的輸入。

InputStreamReader (Java Platform SE 6) 

InputStreamReader 是字節(jié)流通向字符流的橋梁:它使用指定的 charset 讀取字節(jié)并將其解碼為字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。 

構(gòu)造方法摘要 

InputStreamReader (InputStream in) 
     創(chuàng)建一個使用默認字符集的 InputStreamReader。 
InputStreamReader (InputStream in, Charset cs) 
     創(chuàng)建使用給定字符集的 InputStreamReader。 
InputStreamReader (InputStream in, CharsetDecoder dec) 
     創(chuàng)建使用給定字符集解碼器的 InputStreamReader。 
InputStreamReader (InputStream in, String charsetName) 
     創(chuàng)建使用指定字符集的 InputStreamReader。
 

每次調(diào)用 InputStreamReader 中的一個 read() 方法都會導(dǎo)致從底層輸入流讀取一個或多個字節(jié)。要啟用從字節(jié)到字符的有效轉(zhuǎn)換,可以提前從底層流讀取更多的字節(jié),使其超過滿足當(dāng)前讀取操作所需的字節(jié)。

為了達到最高效率,可要考慮在 BufferedReader 內(nèi)包裝 InputStreamReader。例如:

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

InputStreamReader最大的特點是可以指轉(zhuǎn)換的定編碼格式,這是其他類所不能的,從構(gòu)造方法就可看出,這一點在讀取中文字符時非常有用

FileReader

1)FileReader類介紹:

InputStreamReader類的子類,所有方法(read()等)都從父類InputStreamReader中繼承而來;

2)與InputStreamReader類的區(qū)別:

構(gòu)造方法摘要 

FileReader (File  file) 

          在給定從中讀取數(shù)據(jù)的 File 的情況下創(chuàng)建一個新 FileReader 。

FileReader (FileDescriptor  fd) 

         在給定從中讀取數(shù)據(jù)的 FileDescriptor 的情況下創(chuàng)建一個新 FileReader 。

FileReader (String  fileName) 

          在給定從中讀取數(shù)據(jù)的文件名的情況下創(chuàng)建一個新 FileReader 

該類與它的父類InputStreamReader的主要不同在于構(gòu)造函數(shù),主要區(qū)別也就在于構(gòu)造函數(shù)!

從InputStreamReader的構(gòu)造函數(shù)中看到,參數(shù)為InputStream和編碼方式,可以看出,當(dāng)要指定編碼方式時,必須使用InputStreamReader類;而FileReader構(gòu)造函數(shù)的參數(shù)與FileInputStream同,為File對象或表示path的String,可以看出,當(dāng)要根據(jù)File對象或者String讀取一個文件時,用FileReader;

我想FileReader子類的作用也就在于這個小分工吧。該類與它的父類InputStreamReader的主要不同在于構(gòu)造函數(shù),主要區(qū)別也就在于構(gòu)造函數(shù)!

從InputStreamReader

的構(gòu)造函數(shù)中看到,參數(shù)為InputStream和編碼方式,可以看出,當(dāng)要指定編碼方式時,必須使用InputStreamReader類;而FileReader構(gòu)造函數(shù)的參數(shù)與FileInputStream同,為File對象或表示path的String,可以看出,當(dāng)要根據(jù)File對象或者String讀取一個文件時,用FileReader;

我想FileReader子類的作用也就在于這個小分工吧。

二 聯(lián)系與區(qū)別

(1)字符與字節(jié):

FileInputStream 類以二進制輸入/輸出,I/O速度快且效率搞,但是它的read()方法讀到的是一個字節(jié)(二進制數(shù)據(jù)),很不利于人們閱讀,而且無法直接對文件中的字符進行操作,比如替換,查找(必須以字節(jié)形式操作);

而Reader類彌補了這個缺陷,可以以文本格式輸入/輸出,非常方便;比如可以使用while((ch = filereader.read())!=-1 )循環(huán)來讀取文件;可以使用BufferedReader的readLine()方法一行一行的讀取文本。

(2)編碼

InputStreamReader ,它是字節(jié)轉(zhuǎn)換為字符的橋梁。 你可以在構(gòu)造器重指定編碼的方式,如果不指定的話將采用底層操作系統(tǒng)的默認編碼方式,例如GBK等。

FileReader與InputStreamReader 涉及編碼轉(zhuǎn)換(指定編碼方式或者采用os默認編碼),可能在不同的平臺上出現(xiàn)亂碼現(xiàn)象!而FileInputStream 以二進制方式處理,不會出現(xiàn)亂碼現(xiàn)象.

因此要指定編碼方式時,必須使用InputStreamReader 類,所以說它是字節(jié)轉(zhuǎn)換為字符的橋梁;

(3) 緩存區(qū)

    BufferReader類用來包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader 和InputStreamReader)。

(4)規(guī)范用法

總結(jié)以上內(nèi)容,得出比較好的規(guī)范用法:

1) File file = new File ("hello.txt");

FileInputStream in=new FileInputStream (file); 

2) File file = new File ("hello.txt");

FileInputStream in=new FileInputStream (file); 
InputStreamReader inReader=new InputStreamReader (in,"UTF-8"); 
BufferedReader bufReader=new BufferedReader(inReader); 

3) File file = new File ("hello.txt");

FileReader fileReader=new FileReader(file); 
BufferedReader bufReader=new BufferedReader(fileReader);

相關(guān)文章

  • jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    在JAVA WEB應(yīng)用中,如何獲取servlet請求中的參數(shù),本文講解了jsp頁面中獲取servlet請求中的參數(shù)的辦法
    2018-03-03
  • 聊聊SpringBoot中組件無法被注入的問題

    聊聊SpringBoot中組件無法被注入的問題

    這篇文章主要介紹了SpringBoot中組件無法被注入的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot實現(xiàn)License生成和校驗的過程詳解

    SpringBoot實現(xiàn)License生成和校驗的過程詳解

    在我們向客戶銷售商業(yè)軟件的時候,常常需要對所發(fā)布的軟件實行一系列管控措施,諸如驗證使用者身份、軟件是否到期,以及保存版權(quán)信息和開發(fā)商詳情等,所以本文給大家介紹了SpringBoot實現(xiàn)License生成和校驗的過程,需要的朋友可以參考下
    2024-09-09
  • 輕松掌握Java適配器模式

    輕松掌握Java適配器模式

    這篇文章主要幫助大家輕松掌握Java適配器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • idea啟動spring項目中文亂碼的解決方法

    idea啟動spring項目中文亂碼的解決方法

    本文主要介紹了idea啟動spring項目中文亂碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • CGLIB代理的使用與原理解析

    CGLIB代理的使用與原理解析

    這篇文章主要介紹了CGLIB代理的使用與原理解析,靜態(tài)代理和JDK 代理模式都要求目標(biāo)對象是實現(xiàn)一個接口,但是有時候目標(biāo)對象只是一個單獨的對象,并沒有實現(xiàn)任何的接口,這個時候可使用目標(biāo)對象子類來實現(xiàn)代理,這就是Cglib代理,需要的朋友可以參考下
    2023-09-09
  • Java日志軟件Log4j的基本使用教程

    Java日志軟件Log4j的基本使用教程

    這篇文章主要介紹了Java日志軟件Log4j的基本使用教程,包括回滾和發(fā)送日志郵件等基本功能使用的講解,需要的朋友可以參考下
    2015-12-12
  • Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解

    Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解

    這篇文章主要介紹了Spring cloud Feign 深度學(xué)習(xí)與應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • 使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法

    使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法

    這篇文章主要介紹了使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解spring boot starter redis配置文件

    詳解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通過配置RedisConnectionFactory中的相關(guān)參數(shù)去實現(xiàn)連接redis service。下面通過本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下
    2017-07-07

最新評論

宁都县| 巨野县| 南木林县| 涞水县| 桐乡市| 广昌县| 许昌市| 万州区| 定日县| 驻马店市| 广州市| 信丰县| 育儿| 广饶县| 新绛县| 辰溪县| 涡阳县| 兴业县| 岢岚县| 杨浦区| 江山市| 洛浦县| 驻马店市| 洛浦县| 台中市| 长岛县| 天峻县| 定远县| 长乐市| 三门县| 上栗县| 西华县| 大洼县| 科技| 黑山县| 讷河市| 乐亭县| 南华县| 聂荣县| 玉林市| 乾安县|