位元組流與字元流的區別

2021-05-23 16:45:11 字數 1596 閱讀 9414

位元組流與字元流的區別

位元組流與和字元流的使用非常相似,兩者除了操作**上的不同之外,是否還有其他的不同呢?

實際上位元組流在操作時本身不會用到緩衝區(記憶體),是檔案本身直接操作的,而字元流在操作時使用了緩衝區,通過緩衝區再操作檔案,如圖

下面以兩個寫檔案的操作為主進行比較,但是在操作時位元組流和字元流的操作完成之後都不關閉輸出流。

publicstaticvoidmain(string args)throwsioexception

程式執行結果:

hello word

此時沒有關閉位元組流操作,但是檔案中也依然存在了輸出的內容,證明位元組流是直接操作檔案本身的。而下面繼續使用字元流完成,再觀察效果。

提問:什麼叫緩衝區?

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

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

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

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

在字元流的操作中,所有的字元都是在記憶體中形成的,在輸出前會將所有的內容暫時儲存在記憶體之中,所以使用了緩衝區暫存資料。

如果想在不關閉時也可以將字元流的內容全部輸出,則可以使用writer類中的flush()方法完成。

out.flush   //強制性的清空緩衝區中的內容

此時,檔案中已經存在了內容,更進一步證明內容是儲存在緩衝區的。這一點在讀者日後的開發中要特別引起注意。

提問:使用位元組流好還是字元流好?

學習完位元組流和字元流的基本操作後,已經大概地明白了操作流程的各個區別,那麼在開發中是使用位元組流好還是字元流好呢?

回答:使用位元組流更好。

在回答之前,先為讀者講解這樣的乙個概念,所有的檔案在硬碟或在傳輸時都是以位元組的方式進行的,包括等都是按位元組的方式儲存的,而字元是只有在記憶體中才會形成,所以在開發中,位元組流使用較為廣泛。

publicstaticvoidmain(string args)throwsioexception

程式執行結果:

null 沒有任何內容 ;

程式執行後會發現檔案中沒有任何內容,這是因為字元流操作時使用了緩衝區,而在關閉字元流時會強制性地將緩衝區中的內容進行輸出,但是如果程式沒有關閉,則緩衝區中的內容是無法輸出的,所以得出結論:字元流使用了緩衝區,而位元組流沒有使用緩衝區。

位元組流與字元流的區別

要把一片二進位制資料資料逐一輸出到某個裝置中,或者從某個裝置中逐一讀取一片二進位制資料,不管輸入輸出裝置是什麼,我們要用統一的方式來完成這些操作,用一種抽象的方式進行描述,這個抽象描述方式起名為io流,對應的抽象類為outputstream和inputstream 不同的實現類就代表不同的輸入和輸出...

位元組流與字元流的區別

1.字元流操作的時候會使用緩衝區,而位元組流操作的時候不會使用緩衝區 2.在輸出的時候,outputstream即使不關閉也能將內容輸出,writer則不行,不關閉的話,最後一條內容不能輸出,因為所有內容都儲存在緩衝區,每當呼叫了close 方法即意味著清空了緩衝區,即可證明字元流確實使用了緩衝區的...

位元組流與字元流的區別

a fileoutputstream file name 建立乙個檔案輸出流,向指定的 file 物件輸出資料。b fileoutputstream filedescriptor 建立乙個檔案輸出流,向指定的檔案描述器輸出資料。c fileoutputstream string name 建立乙個檔...