天天看點

Java位元組流與字元流的差別和執行效率

差別:

1、位元組流在操作的時候本身是不會用到緩沖區(記憶體)的,是與檔案本身直接操作的,而字元流在操作的時候是使用到緩沖區的

2、位元組流在操作檔案時,即使不關閉資源(close方法),檔案也能輸出,但是如果字元流不使用close方法的話,則不會輸出任何内容,說明字元流用的是緩沖區,并且可以使用flush方法強制進行重新整理緩沖區,這時才能在不close的情況下輸出内容

3、Reader類的read()方法傳回類型為int :作為整數讀取的字元(占兩個位元組共16位),範圍在 0 到 65535 之間 (0x00-0xffff),如果已到達流的末尾,則傳回 -1

inputStream的read()雖然也傳回int,但由于此類是面向位元組流的,一個位元組占8個位,是以傳回 0 到 255 範圍内的 int 位元組值。如果因為已經到達流末尾而沒有可用的位元組,則傳回值 -1。是以對于不能用0-255來表示的值就得用字元流來讀取!比如說漢字.

4、位元組流與字元流主要的差別是他們的的處理方式

位元組流:處理位元組和位元組數組或二進制對象;

字元流:處理字元、字元數組或字元串。

那開發中究竟用位元組流好還是用字元流好呢?

一、字元(Reader和 Writer):中文,字元是隻有在記憶體中才會形成的,操作字元、字元數組或字元串,

二、位元組(InputStream 和OutputStream):音頻檔案、圖檔、歌曲,所有的硬碟上儲存檔案或進行傳輸的時候,操作位元組和位元組數組或二進制對象,

*如果要java程式實作一個拷貝功能,應該選用位元組流進行操作(可能拷貝的是圖檔),并且采用邊讀邊寫的方式(節省記憶體)。

***

**緩沖區

緩沖區可以簡單地了解為一段記憶體區域。

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

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

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

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