位元組流與字元流的區別

2021-10-05 17:47:17 字數 2583 閱讀 9599

(a)fileoutputstream(file name) 建立乙個檔案輸出流,向指定的 file 物件輸出資料。

(b)fileoutputstream(filedescriptor) 建立乙個檔案輸出流,向指定的檔案描述器輸出資料。

(c)fileoutputstream(string name) 建立乙個檔案輸出流,向指定名稱的檔案輸出資料。

(d)fileoutputstream(string, boolean) 用指定系統的檔名,建立乙個輸出檔案。

inputstreamreader 和 outputstreamreader :

把乙個以位元組為導向的 stream 轉換成乙個以字元為導向的 stream 。

inputstreamreader 類是從位元組流到字元流的橋梁:它讀入位元組,並根據指定的編碼方式,將之轉換為字元流。

使用的編碼方式可能由名稱指定,或平台可接受的預設編碼方式。

inputstreamreader 的 read() 方法之一的每次呼叫,可能促使從基本位元組輸入流中讀取乙個或多個位元組。

為了達到更高效率,考慮用 bufferedreader 封裝 inputstreamreader ,

bufferedreader in = new bufferedreader(new inputstreamreader(system.in));

inputstream,outputstream,reader,writer都是抽象類。所以不能直接new
位元組流和字元流使用是非常相似的,那麼除了操作**的不同之外,還有哪些不同呢?
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):中文,字元是只有在記憶體中才會形成的,操作字元、字元陣列或字串,

file infile = new file("c:\\a.txt");

file outfile = new file("c:\\b.txt");

fileinputstream inputstream = new fileinputstream(infile);

fileoutputstream outputstream = new fileoutputstream(outfile);

//邊讀邊寫

byte content = new byte[1024];

int len;

while ((len = inputstream.read(content)) != -1)

outputstream.flush();

outputstream.close();

inputstream.close();

//一次性讀寫

file outfile2 = new file("c:\\c.txt");

fileinputstream inputstream2 = new fileinputstream(infile);

fileoutputstream outputstream2 = new fileoutputstream(outfile2);

byte b=new byte[(int)infile.length()];

inputstream2.read(b);

outputstream2.write(b);

outputstream2.flush();

outputstream2.close();

inputstream2.close();

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

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

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

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

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

位元組流與字元流的區別

位元組流與字元流的區別 位元組流與和字元流的使用非常相似,兩者除了操作 上的不同之外,是否還有其他的不同呢?實際上位元組流在操作時本身不會用到緩衝區 記憶體 是檔案本身直接操作的,而字元流在操作時使用了緩衝區,通過緩衝區再操作檔案,如圖 下面以兩個寫檔案的操作為主進行比較,但是在操作時位元組流和字元...

位元組流與字元流的區別

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

位元組流與字元流的區別

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