IO流之轉換流

2022-08-12 05:42:07 字數 1671 閱讀 8054

查閱outputstreamwriter的api介紹,outputstreamwriter 是字元流通向位元組流的橋梁:可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。它的作用的就是,將字串按照指定的編碼表轉成位元組,在使用位元組流將這些位元組寫出去。

public static void writecn() throws exception
outputstreamwriter流物件,它到底如何把字元轉成位元組輸出的呢?

其實在outputstreamwriter流中維護自己的緩衝區,當我們呼叫outputstreamwriter物件的write方法時,會拿著字元到指定的碼表中進行查詢,把查到的字元編碼值轉成位元組數存放到outputstreamwriter緩衝區中。然後再呼叫重新整理功能,或者關閉流,或者緩衝區存滿後會把緩衝區中的位元組資料使用位元組流寫到指定的檔案中。

查閱inputstreamreader的api介紹,inputstreamreader 是位元組流通向字元流的橋梁:它使用指定的字元編碼表讀取位元組並將其解碼為字元。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平台預設的字符集。

//關閉流

isr.close();

}}注意:在讀取指定的編碼的檔案時,一定要指定編碼格式,否則就會發生解碼錯誤,而發生亂碼現象。

發現有如下繼承關係:

outputstreamwriter:

|--filewriter:

inputstreamreader:

|--filereader;

父類和子類的功能有什麼區別呢?

outputstreamwriter和inputstreamreader是字元和位元組的橋梁:也可以稱之為字元轉換流。字元轉換流原理:位元組流+編碼表。

filewriter和filereader:作為子類,僅作為操作字元檔案的便捷類存在。當操作的字元檔案,使用的是預設編碼表時可以不用父類,而直接用子類就完成操作了,簡化了**。

inputstreamreader isr = new inputstreamreader(new fileinputstream("a.txt"));//預設字符集。

inputstreamreader isr = new inputstreamreader(new fileinputstream("a.txt"),"gbk");//指定gbk字符集。

filereader fr = new filereader("a.txt");

這三句**的功能是一樣的,其中第三句最為便捷。

注意:一旦要指定其他編碼時,絕對不能用子類,必須使用字元轉換流。什麼時候用子類呢?

條件:1、操作的是檔案。2、使用預設編碼。

總結:位元組--->字元 : 看不懂的--->看的懂的。  需要讀。輸入流。 inputstreamreader

字元--->位元組 : 看的懂的--->看不懂的。  需要寫。輸出流。 outputstreamwriter

JAVA中IO流物件之轉換流

我們平常可能會遇到這樣的問題,我們在以前用位元組流字元流儲存的時候字元編碼都是預設按系統的編碼儲存的,我們的電腦 是gbk簡體中文,但有時候我們需要別的字元編碼,像utf 8,這時候讀取的檔案就可能是亂碼了。這時候,io的轉換流就派上用場了。兩個新的io流類,outstreamwriter和inpu...

java之IO流(緩衝流 轉換流)

緩衝流是在位元組流或字元流的基礎上,新增了乙個緩衝區。緩衝流相對於位元組流和字元流有一些優點 案例 try bufferedinputstream bis newbufferedinputstream new fileinputstream source bufferedoutputstream b...

IO流(字元流 轉換流)

字元輸入流 public inputstreamreader inputstream in 預設的編碼格式 一般使用這個 public inputstreamreader inputstream in,string charsetname 指定的編碼格式 字元輸入流 位元組輸入流 編碼表 將位元組流...