字元(Character)流與位元組(Byte)流

2022-07-23 12:03:12 字數 1147 閱讀 3230

先說說區分:

位元組流按位元組讀寫,字元流按字元讀寫。位元組流屬於全能流,可以讀取任意形式的二進位製流。字元流只能讀取字元文字此類。

比較好區分的方法:

以stream結尾的相關流類都是位元組流,以reader、writer結尾的都是字元流。字元流使用緩衝區作為中介幫助讀寫流檔案。好處顯而易見,多了乙個緩衝區。不夠好的地方就是不顯示flush、close的話可能導致本次操作白給。

fileoutputstream.write(new string("hello dabai").getbytes());

如上位元組流即便不手動close 內容也能寫入。

filewriter.write("hello dabai");

上述字元流如果不手動flush的話那就白給了。

一般情況下,可以認為位元組流更好,因為用的比較多,使用場景也更常見。

流的分類:

inputstream是所有位元組輸入流的祖先,outputstream是所有位元組輸出流的祖先,都是抽象類,都實現了closeable介面,其中outputstream還實現了flushable介面。

protected object lock;

該屬性在建構函式中指向當前類this,在writer中write方法使用synchronized加了鎖

在reader中則是提供了乙個抽象方法交給子類實現

inputstream、outputstream都用於處理二進位制資料,即處理位元組。但實際上處理字元的情況也不少,所以有了字元流,它是按照jvm的encode來處理的,進行字符集的轉化。二者可以通過inputstreamreader和outputstreamwriter關聯,這兩個類分別繼承自reader、writer。建構函式都需要乙個位元組流物件,inputstreamreader類中包含乙個屬性streamdecoder,outputstreamwriter類中包含乙個屬性streamencoder,這類屬性也是實際完成read、write、close以及flush的物件。這類屬性同樣屬於reader、writer的子類,但是他們對stream進行對應的字元編碼並進行字元形式的輸入輸出。

位元組流與字元流

位元組流 輸入位元組流 inputstream 所有輸入位元組流的基類,是抽象類 fileinputstream 讀取檔案資料的輸入位元組流 bufferedinputstream 緩衝輸入位元組流,該類可以提高讀取檔案資料的效率 輸出位元組流 outputstream 所有輸出位元組流的基類,是抽...

位元組流與字元流

1.在位元組流中輸出資料主要是使用outputstream完成,輸入使的是inputstream,在字元流中輸出主要是使用writer類完成,輸入流主要使用reader類完成。這四個都是抽象類 2.inputstream 和outputstream,兩個是為位元組流設計的,主要用來處理位元組或二進位...

位元組流與字元流

位元組流與字元流的操作的本質區別只有乙個 位元組流是原生的操作,而字元流是經過處理後的操作。在進行網路資料傳輸 磁碟資料儲存所儲存的支援資料型別只有 位元組,所以磁碟中的資料必須先讀取到記憶體後才可以操作,記憶體可以可以幫助我們把位元組變成字元。字元更加適合操作中文。位元組流 inputstream...