IOl流的分類與使用

2021-09-29 16:31:43 字數 4690 閱讀 9973

把資料從 資料來源 輸送到 資料目的地。

分類:

位元組 輸入流 : inputstream

位元組 輸出流 : outputstream

字元 輸入流 : ***xxreader

字元 輸出流 : ******writer

注: inputstream 和 outputstream 是抽象類

選用原則:

效率, 緩衝區位元組流 > 位元組流 > 緩衝區字元流 > 字元流

是否需要操作:基本只能是字元流(只有字元流(每次讀取的是字元) 我們才能看懂,才能操作)

位元組流:

【陣列位元組流】bytearrayinputstream/bytearrayoutputstream:

從位元組陣列中讀取資料/把資料寫到位元組陣列中。專門用來讀取位元組陣列。

bytearrayinputstream

位元組陣列輸入流:

1,具有緩衝區

2,在建立該流的時候,就會把位元組陣列中所有的內容讀取到緩衝區中。

3,加快讀取的效率

4,read();讀取到流末尾 會返回 -1

bytearrayoutputstream

有緩衝區的輸出流

1,write(資料);寫到了緩衝區中

2,flush();緩衝區中資料刷 到 目的地

緩衝區:加快執行速度,減少io操作

【檔案位元組流】fileinputstream/fileoutputstream:

從檔案中讀取資料/把資料輸出到檔案中。

fileinputstream:讀取檔案中的資料放到這個流中。

1構造器1:new fileinputstream("檔案路徑");//讀取字串路徑所表示檔案的資料

2構造器2:new fileinputstream(new file("檔案路徑"));//讀取檔案的資料

fileoutputstream: 把輸出流的資料輸出到檔案中。

1構造器1:new fileoutputstream(new file"檔案路徑");//把流中的資料輸出到檔案

2構造器2:new fileoutputstream(new file("檔案路徑"),是否追加);//讀取檔案的資料,

true-->本次輸出的資料在檔案末尾追加 ;false-->不追加,覆蓋。

【管道位元組流】位元組流:pipedinputstream/pipedoutputstream 管道輸入/輸出流

一般結合執行緒來用。

1. 管道輸入/輸出流,這個輸入/輸出是相對於當前**來說的。

2. 管道輸入流/輸出流 通過建立物件的時候用構造器傳值建立連線。

【位元組包裝流帶緩衝區】bufferedinputstream/bufferedoutputstream 有緩衝區的包裝流

特點:有緩衝區的包裝流 效率 會高一些,可以使用mark和reset功能(標記 回讀 功能)

1:構造器 new bufferedinputstream(位元組流,緩衝區大小);//預設緩衝大小是8192位元組

2:構造器 new bufferedoutputstream(位元組流,緩衝區大小)//預設緩衝大小是512位元組

【資料型別位元組包裝流】datainputstream/dataoutputstream 讀取/寫出 某個型別的資料

5.1. 特點:可以一次寫乙個int/long/double 基本資料型別+string的資料流中,可以從流中一次讀取乙個基本資料型別的資料。

5.2.注意:是通過基本資料型別資料的 位元組數 進行讀取 ,如果a.txt中有乙個字元6, 不能用readint()去讀取,因為這個6代表的位元組數不是int所代表的位元組數。

5.3. 推薦:使用datainputstream讀取資料 最好是讀取用dataoutputstream寫出去的資料。不然讀取不到想要的效果。

【列印包裝流】列印包裝流 printstream 為另乙個輸出流新增了功能

printstream ps = new printstream(file);

提供很多格式的列印方法(多為c語言常用列印方法)

【檔案字元流】filereader/filewriter

每次讀取的都是字元,可以檢視,可以操作。

【按行讀寫字元流】

bufferedreader : 讀取一行

printwriter :寫出一行

【字元位元組轉換流】:

位元組輸入流轉換為字元輸入流:inputstreamreader

位元組輸入流轉換為字元輸入流:outputstreamwriter

特 點 : 將位元組流轉換為字元流的時候可以 設定編碼。

【隨機訪問流】:randomaccessfile

特點:將檔案中的資料全部讀取到流中,對流可以一直反覆操作。

構造器:new randomaccessfile(new file(),「r」)—>唯讀方式(「r」)

構造器:new randomaccessfile(new file(),「rw」)—>讀寫方式(「rw」)

主要操作

3.1:seek() 定位,設定到此檔案開頭測量到的檔案指標偏移量,在該位置發生下乙個讀取或寫入操作。

3.2:getfilepointer() 獲得檔案的當前偏移量

3.3:skipbytes() 跳過多少位元組數

3.4:length() 檔案大小

詳解:seek(index); 設定偏移量。

eg: a.txt檔案中 abc你 佔6位元組 seek(3),表示將偏移量設定到 abc|你 下次讀取就是讀取 你 的第乙個位元組

getfilepointer();獲得檔案中的當前偏移量

eg: a.txt檔案中 abc你 佔6位元組 讀取了3個位元組,代表當前偏移量為3 返回為3。

skipbytes(n);跳過n位元組

eg: a.txt檔案中 abc你 佔6位元組, skipbytes(1)跳過乙個位元組,偏移量在當前位置+1。

【物件流】:objectinputstream\objectoutstream

4.1:序列化:利用objectoutputstream 將物件輸出流 將物件寫到檔案中。

在利用objectoutputstream寫物件到檔案的過程中, 

eg1:objectoutputstream oos = new objectoutputstream(檔案,追加);

oos.writeobject(物件1);

oos.writeobject(物件2);

oos.writeobject(物件3);

得到檔案:

標記物件1物件2物件3

eg2:

上面**執行兩次

得到檔案:

標記物件1物件2物件3標記物件1物件2物件3

4.1:反序列化:利用objectinputstream將物件從檔案中讀取到流中。

在利用objectinputstream將檔案中的物件讀取過來的時候。

eg11:讀取上eg1 所產生的檔案

objectinputstream ois = new objectinputstream(檔案);

ois.readobejct();

ois.readobject();

ois.readobject();

得到3個物件

eg22:讀取上eg2所產生的檔案

objectinputstream ois = new objectinputstream(檔案);

ois.readobejct();

ois.readobject();

ois.readobject();

ois.readobject();

ois.readobject();

ois.readobject();

得到:---> 報錯-->因為連續讀取了6個物件,但是eg2檔案中是 標記3物件標記3物件 在讀取到第四個物件的時候會報錯,readobject 讀取到的是標記。

改:objectinputstream ois = new objectinputstream(檔案);

ois.readobejct();

ois.readobject();

ois.readobject();

ois = new objectinputstream(檔案);//因為在呼叫構造器的時候回讀取 標記

ois2.readobejct();

ois2.readobject();

ois2.readobject();

得到 6物件

注意:物件的序列化和反序列化操作的物件一定要實現serializable介面。(這是空介面,只是乙個標識);

【位元組流拼接流]:sequenceinputstream/sequenceoutputstream

將多個流拼接在一起,做讀寫操做。

IO 流的分類

io的分類 1.按流的方向分 按流的方向分可以分為輸入流跟輸出流 2.按處理資料單位不同可以分為位元組流和字元流 位元組流 最原始的流,讀出來的是010101.位元組流是按照位元組乙個乙個的讀,如 fileinputstream和fileoutputstream。凡是以stream結尾的都是位元組流...

IO流的分類

流的分類 按照流的方向 1 輸入流 資料來源到程式 inputstream reader讀進來 2 輸出流 程式到目的地 outputstream writer寫進去 按照處理資料單元 1 位元組流 按照位元組讀取資料 inputstream outputstream 2 字元流 按照字元讀取資料 ...

javaSE IO流的分類 選擇

inputstream 位元組輸入流抽象基類 fileinputstream bufferedinputstream 緩衝流 高效 ouputstream 位元組輸出流抽象基類 fileoutputstream bufferedouputstream 緩衝流 高效 writer 字元文字輸出流抽象基...