javaSE IO流學習總結

2021-08-21 01:14:28 字數 3378 閱讀 6730

是最基本的流,可以操作所有檔案: 父類:inputstream和outputstream 這兩個是介面,需要生成子類物件使用

位元組輸出流inputstream負責將檔案中內容讀出,讀出的方式一共可分成四種:

一次讀取乙個位元組陣列

// 位元組輸出流一次讀出乙個位元組

inputstream is = new fileinputstream("mm.txt");

int len = 0;

while ((len = is.read()) != -1)

一次讀取乙個位元組陣列

//位元組輸出流一次讀取乙個位元組陣列

inputstream is = new fileinputstream("mm.txt");

int len = 0;

byte by = new

byte[1024];

while((len = is.read(by))!=-1)

自帶緩衝區的位元組輸出流 一次讀取乙個位元組

// 自帶緩衝區的位元組輸出流 一次讀取乙個位元組

// 採用預設緩衝區大小

bufferedinputstream bis = new bufferedinputstream(new fileinputstream("mm.txt"));

intlen =0;

while ((len = bis.read()) !=-1)

自帶緩衝區位元組輸出流 一次讀取乙個位元組陣列

// 自帶緩衝區的位元組輸出流 一次讀取乙個位元組

// 採用預設緩衝區大小

bufferedinputstream bis = new bufferedinputstream(new fileinputstream("mm.txt"));

int len = 0;

byte by = new

byte[1024];

while ((len = bis.read(by)) != -1)

位元組輸入流outputstream

負責向檔案中寫資料,與輸出流方法對應,也是包括四種方式,一次寫入乙個位元組,一次寫入乙個位元組陣列,自帶緩衝區的一次寫入乙個位元組,自帶緩衝的一次寫入乙個位元組陣列 ,**略。

需要注意的細節

檔案從輸出流 經過輸入流寫到另乙個檔案中時,原始檔和目的檔案一定要寫對

//檔案的格式一定要對應正確

//輸出流

//輸入流

fileoutputstream fos = new fileoutputstream("e:");

一次讀取乙個位元組時,若是顯示在控制台上,則中文會顯示亂碼,其原因是因

為漢字是由多個位元組組成的,每讀取乙個位元組,就顯示在控制台,就好像是 把漢字拆開了,所以控制台識別不了,但是若是直接輸入到檔案中則不會發

生這種情況,因為位元組輸出流會自動將位元組組合。

自帶緩衝區的輸入輸出流 傳輸資料的速度更快,根據需要若傳輸資料較大 時,呼叫flush方法重新整理一下緩衝區

提問:什麼叫緩衝區?

在很多地方都碰到緩衝區這個名詞,那麼到底什麼是緩衝區?又有什麼作用呢?

回答:緩衝區可以簡單地理解為一段記憶體區域。

可以簡單地把緩衝區理解為一段特殊的記憶體。

某些情況下,如果乙個程式頻繁地操作乙個資源(如檔案或資料庫),則效能會很低,此時為了提公升效能,就可以將一部分資料暫時讀入到記憶體的一塊區域之中,以後直接從此區域中讀取資料即可,因為讀取記憶體速度會比較快,這樣可以提公升程式的效能。

字元流是位元組流的在某方面的優化,可以這樣理解,一次傳輸乙個字元比一次傳輸乙個位元組速度快的多,所有資料都可以用位元組流操作,可以用字元流操作的都是可以用windows記事本開啟,且開啟後我們能看懂的(低俗的理解)。

字元流的父類是writer和reader,型別是抽象類,需要生成子類物件使用

字元流的構造:位元組流+編碼表 = 字元流

//位元組轉換字元流,將位元組流和編碼表包裝成字元流

inputstreamreader isr = new inputstreamreader(new fileinputstream("mm.txt"));

outputstreamwriter osr = new outputstreamwriter(new fileoutputstream("mm.txt"));

也可以直接使用轉換流的子類,更加方便

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

filewriter fw = new filewriter("mm.txt");

自帶緩衝區的字元流 高階方法:一次讀取一行或一次寫入一行

一次寫入一行:

bufferedwriter bw

=new bufferedwriter(new filewriter("mm.txt"));

for (int i =

0; i <

10; i++)

bw.close();

一次讀取一行:

bufferedreader br = new bufferedreader(new filereader("mm.txt"));

string line = null;

while ((line = br.readline()) != null)

注意:使用readline()方法時:

- 通過下列字元之一即可認為某行已終止:換行 (『\n』)、回車 (『\r』) 或回車後直接跟著換行。

- 包含該行內容的字串,不包含任何行終止符,如果已到達流末尾,則返回 null 。

其中的輸入和輸出方法和位元組流操作相似,在這裡不再贅述。

需要注意的點:

向檔案中輸入資料時,若輸入資料較小,則呼叫close()方法,就可以將資料全部從輸出流中刷出,但如果寫入的資料較多,則在適當時候要呼叫flush()方法重新整理一下輸出流。

javaSE IO流的分類 選擇

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

javaSE IO流(裝飾設計模式)

裝飾設計模式 當想要對已有的物件進行功能增強時,可以自定義類將已有的物件傳入,並提供加強功能,自定義的該類稱為裝飾類 典型的 reader filereader bufferedreader class decorator public class decoratordemo extends dec...

網路流學習總結

設 定義在二元組 上的實數函式且滿足 容量限制 對於每條邊,流經該邊的流量不得超過該邊的容量,即 f u,v le c u,v 斜對稱性 每條邊的流量與其相反邊的流量之和為 0,即 f u,v f v,u 流守恆性 從源點流出的流量等於匯點流入的流量 最大流我們有一張圖,要求從源點流向匯點的最大流量...