Java IO 03 轉換流 緩衝流

2021-08-21 16:01:51 字數 3495 閱讀 4217

1.1 outputstreamwriter

1)介紹

outputstreamwriter 是字元流通向位元組流的橋梁:可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。

它的作用的就是,將字串按照指定的編碼表轉成位元組,再使用位元組流將這些位元組寫出去。

2)示例

// 1 建立與檔案關聯的位元組輸出流物件

fileoutputstream fos =

newfileoutputstream

("/users/mac/mydata/ioouttest.txt");

// 2 建立可以把字元轉成位元組的轉換流物件,並指定編碼

outputstreamwriter osw =

newoutputstreamwriter

(fos,

"utf-8");

// 3 呼叫轉換流,把文字寫出去,其實是寫到轉換流的緩衝區中

osw.

write

("你好");

// 寫入緩衝區。

// 4 重新整理並關閉流

osw.

close()

;

1.2 inputstreamreader

1)介紹

inputstreamreader 是位元組流通向字元流的橋梁:它使用指定的字元編碼表讀取位元組並將其解碼為字元。

它使用的字符集可以由名稱指定或顯式給定,或者可以接受平台預設的字符集。

2)示例

// 1 建立讀取檔案的位元組流物件

inputstream in =

newfileinputstream

("/users/mac/mydata/ioouttest.txt");

// 2 建立轉換流物件

inputstreamreader isr =

newinputstreamreader

(in,

"utf-8");

// 3 使用轉換流去讀位元組流中的位元組

int ch =0;

while

((ch = isr.

read()

)!=-1

)// 關閉流

isr.

close()

;

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

1.3 轉換流和子類的區別

outputstreamwriter --> filewriter

inputstreamwriter --> filereader

當操作的字元檔案,使用的是預設編碼表時可以不用父類,直接用子類就能完成操作,簡化了**。

一旦要指定其他編碼時,絕對不能用子類,必須使用字元轉換流。

2.1 位元組緩衝流

1)位元組緩衝輸出流 bufferedoutputstream

// 1 建立位元組輸出流

fileoutputstream fos=

newfileoutputstream

("/users/mac/mydata/ioouttest.txt");

// 使用緩衝流封裝

bufferedoutputstream bos=

newbufferedoutputstream

(fos)

;// 2 寫資料

bos.

write

("hello world\n"

.getbytes()

);// 3 關閉流

bos.

close()

;

2)位元組緩衝輸入流 bufferedinputstream

// 1 建立位元組輸入流

fileinputstream fis=

newfileinputstream

("/users/mac/mydata/ioouttest.txt");

// 2 包裝基本流

bufferedinputstream bis=

newbufferedinputstream

(fis)

;// 3 讀資料

int ch=-1

;while

((ch=bis.

read()

)!=-1

)// 4 關閉流

bis.

close()

;

2.2 字元緩衝流

1)字元緩衝輸出流 bufferedwriter

// 1 建立流

filewriter fw =

newfilewriter

("/users/mac/mydata/ioouttest.txt");

bufferedwriter bw =

newbufferedwriter

(fw)

;// 2 寫資料

for(

int i =

0; i <

5; i++

)// 3 關閉流

bw.close()

;

2)字元緩衝輸入流 bufferedreader

// 1 建立流

bufferedreader br=

newbufferedreader

(new

filereader

("/users/mac/mydata/ioouttest.txt"))

;// 2 讀資料

string line=null;

while

((line=br.

readline()

)!=null)

// 3 關閉流

br.close()

;

2.3 使用字元緩衝流完成文字檔案複製
// 1 指定資料來源和目的檔案

bufferedreader br=

newbufferedreader

(new

filereader

("/users/mac/mydata/ioouttest.txt"))

;bufferedwriter bw=

newbufferedwriter

(new

filewriter

("/users/mac/mydata/ioouttest_copy2.txt"))

;// 2 讀資料與寫資料

string line=null;

while

((line=br.

readline()

)!=null)

// 3 關閉流

bw.close()

;br.

close()

;

1)運算元據的型別

2)資料所在位置

3)是否需要額外功能

轉換流 緩衝流

輸入 輸出流體系中提供了兩個轉換流,這兩個轉換流用於實現將位元組流轉換為字元流。1.1outputstreamwriter outputstreamwriter 是字元流通向位元組流的橋梁 可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。它的作用的就是,將字串按照指定的編碼表轉成位元組,在使...

Java IO流 字元流 與 轉換流 詳解

乙個字元字元的讀 只能用來操作文字 不能寫其他格式 寫入字元流的抽象類 實現子類 filewriter 示例 public class demo04 fwriter.write c fwriter.flush fwriter.write c,1,3 fwriter.flush 使用字串直接寫入 fw...

Java IO 二 IO流 處理流 轉換流

io流 處理流 轉換流 1.轉換流 位元組流轉換為字元流,為了處理亂碼 編碼集 解碼集 2.編碼與解碼的概念 1 編碼 字元 編碼字符集 二進位制 2 解碼 二進位制 解碼字符集 字元 3.亂碼的原因 1 編碼和解碼的字符集的不統一 解碼 byte char 我的ide預設解碼字符集為gbk str...