小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

字節(jié)流與字符流

 鳳舞天煌 2007-11-12

Java中提供了專用于輸入輸出功能的包Java.io,其中包括:
     InputStream,OutputStream,Reader,Writer
     InputStream 和OutputStream,兩個是為字節(jié)流設計的,主要用來處理字節(jié)或二進制對象,
     Reader和 Writer.兩個是為字符流(一個字符占兩個字節(jié))設計的,主要用來處理字符或字符串.


字符流處理的單元為2個字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個字節(jié),操作字節(jié)和字節(jié)數(shù)組。所以字符流是由Java虛擬機將字節(jié)轉(zhuǎn)化為2個字節(jié)的Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片、歌曲,就用字節(jié)流好點,如果是關(guān)系到中文(文本)的,用字符流好點
     所有文件的儲存是都是字節(jié)(byte)的儲存,在磁盤上保留的并不是文件的字符而是先把字符編碼成字節(jié),再儲存這些字節(jié)到磁盤。在讀取文件(特別是文本文件)時,也是一個字節(jié)一個字節(jié)地讀取以形成字節(jié)序列

      字節(jié)流可用于任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串; 2. 字節(jié)流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以
       字節(jié)流是最基本的,所有的InputStrem和OutputStream的子類都是,主要用在處理二進制數(shù)據(jù),它是按字節(jié)來處理的 但實際中很多的數(shù)據(jù)是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉(zhuǎn)化 這兩個之間通過 InputStreamReader,OutputStreamWriter來關(guān)聯(lián),實際上是通過byte[]和String來關(guān)聯(lián) 在實際開發(fā)中出現(xiàn)的漢字問題實際上都是在字符流和字節(jié)流之間轉(zhuǎn)化不統(tǒng)一而造成的

==================我們還可以看到:============
Reader類的read()方法返回類型為int :作為整數(shù)讀取的字符(占兩個字節(jié)共16位),范圍在 0 到 65535 之間 (0x00-0xffff),如果已到達流的末尾,則返回 -1


inputStream的read()雖然也返回int,但由于此類是面向字節(jié)流的,一個字節(jié)占8個位,所以返回 0 到 255 范圍內(nèi)的 int 字節(jié)值。如果因為已經(jīng)到達流末尾而沒有可用的字節(jié),則返回值 -1。因此對于不能用0-255來表示的值就得用字符流來讀??!比如說漢字...至此,有些人可能就會產(chǎn)生一個問題:既然返回結(jié)果只能在0-255之間的值,那何返回byte型的呢? 這個問題提得很好,我先頂你一下~~~也就是說一個int占4個字節(jié),而返回結(jié)果只是在0-255(2的8次方-1)之間,只占1個字節(jié),這就說明返回結(jié)果只占掉int的低8位!其實是這樣的:
read()有個約定,就是達到流的結(jié)尾時返回-1 ,而byte型的范圍是0-255(沒有負數(shù))。因此-1會被表示成255!這樣,如果返回類型是byte,那么255究竟是代表 結(jié)束 還是代表 讀到的byte值 呢? 顯然無法區(qū)分!

補充:java.nio.*包中的ByteBuffer 用get()來完成類似于read()的功能,不過get方法返回的是byte。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多