首頁 >Java >Java入門 >java 流區別是什麼

java 流區別是什麼

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-11-14 09:36:481854瀏覽

java 流區別是什麼

在程式中所有的數據都是以流的方式進行傳輸或保存的,程式需要數據的時候要使用輸入流讀取數據,而當程式需要將一些數據保存起來的時候,就要使用輸出流完成。

程式中的輸入輸出都是以流的形式保存的,流中保存的實際上全都是位元組檔。

位元組流與字元流

在java.io套件中操作檔案內容的主要有兩大類:位元組流、字元流,兩類都分為輸入和輸出操作。在位元組流中輸出資料主要是使用OutputStream完成,輸入使的是InputStream,在字元流中輸出主要是使用Writer類別完成,輸入流主要使用Reader類別完成。 (這四個都是抽象類別)

java中提供了專用於輸入輸出功能的套件Java.io,其中包括:

InputStream,OutputStream,Reader,Writer

InputStream和OutputStream,兩個是為位元組流設計的,主要用來處理位元組或二進位物件。

Reader和Writer,兩個是為字元流(一個字元佔兩個位元組)設計的,主要用來處理字元或字串。

字符流處理的單元為2個位元組的Unicode字符,分別操作字符、字符數組或字串,而字節流處理單元為1個字節,操作字節和字節數組。所以字元流是由Java虛擬機將位元組轉換為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支援性比較好!如果是音訊檔案、圖片、歌曲,就用位元組流好點,如果是關係到中文(文字)的,用字元流好點。

所有檔案的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是檔案的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取檔案(特別是文字檔案)時,也是一個位元組一個位元組地讀取以形成位元組序列。

位元組流可用於任何類型的對象,包括二進位對象,而字元流只能處理字元或字串;2. 位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以。

位元組流是最基本的,所有的InputStrem和OutputStream的子類別都是,主要用在處理二進位數據,它是按字節來處理的但實際中很多的數據是文本,又提出了字元流的概念,它是按虛擬機的encode來處理,也就是要進行字元集的轉換這兩個之間透過InputStreamReader,OutputStreamWriter來關聯,實際上是透過byte[]和String來關聯在實際開發中出現的漢字問題其實都是在字元流和位元組流之間轉換不統一而造成的。

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

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

php中文網,大量的免費Java入門教學,歡迎線上學習!

以上是java 流區別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:java的gc是什麼下一篇:java的gc是什麼