在程式中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程式需要數(shù)據(jù)的時候要使用輸入流讀取數(shù)據(jù),而當(dāng)程式需要將一些數(shù)據(jù)保存起來的時候,就要使用輸出流完成。
程式中的輸入輸出都是以流的形式保存的,流中保存的實際上全都是位元組檔。
位元組流與字元流
在java.io套件中操作檔案內(nèi)容的主要有兩大類:位元組流、字元流,兩類都分為輸入和輸出操作。在位元組流中輸出資料主要是使用OutputStream完成,輸入使的是InputStream,在字元流中輸出主要是使用Writer類別完成,輸入流主要使用Reader類別完成。 (這四個都是抽象類別)
java中提供了專用於輸入輸出功能的套件Java.io,其中包括:
InputStream,OutputStream,Reader,Writer
InputStream和OutputStream,兩個是為位元組流設(shè)計的,主要用來處理位元組或二進(jìn)位物件。
Reader和Writer,兩個是為字元流(一個字元佔兩個位元組)設(shè)計的,主要用來處理字元或字串。
字符流處理的單元為2個位元組的Unicode字符,分別操作字符、字符數(shù)組或字串,而字節(jié)流處理單元為1個字節(jié),操作字節(jié)和字節(jié)數(shù)組。所以字元流是由Java虛擬機(jī)將位元組轉(zhuǎn)換為2個位元組的Unicode字元為單位的字元而成的,所以它對多國語言支援性比較好!如果是音訊檔案、圖片、歌曲,就用位元組流好點,如果是關(guān)係到中文(文字)的,用字元流好點。
所有檔案的儲存是都是位元組(byte)的儲存,在磁碟上保留的並不是檔案的字元而是先把字元編碼成位元組,再儲存這些位元組到磁碟。在讀取檔案(特別是文字檔案)時,也是一個位元組一個位元組地讀取以形成位元組序列。
位元組流可用於任何類型的對象,包括二進(jìn)位對象,而字元流只能處理字元或字串;2. 位元組流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以。
位元組流是最基本的,所有的InputStrem和OutputStream的子類別都是,主要用在處理二進(jìn)位數(shù)據(jù),它是按字節(jié)來處理的但實際中很多的數(shù)據(jù)是文本,又提出了字元流的概念,它是按虛擬機(jī)的encode來處理,也就是要進(jìn)行字元集的轉(zhuǎn)換這兩個之間透過InputStreamReader,OutputStreamWriter來關(guān)聯(lián),實際上是透過byte[]和String來關(guān)聯(lián)在實際開發(fā)中出現(xiàn)的漢字問題其實都是在字元流和位元組流之間轉(zhuǎn)換不統(tǒng)一而造成的。
Reader類別的read()方法傳回類型為int :以整數(shù)讀取的字元(佔兩個位元組共16位元),範(fàn)圍在0 到65535 之間(0x00-0xffff),如果已到達(dá)流的末尾,則返回-1。
inputStream的read()雖然也回傳int,但由於此類是面向位元組流的,一個位元組佔8個位,所以傳回 0 到 255 範(fàn)圍內(nèi)的 int 位元組值。如果因為已經(jīng)到達(dá)流末尾而沒有可用的字節(jié),則傳回值 -1。因此對於不能用0-255來表示的值就得用字元流來讀??!比如說漢字。
php中文網(wǎng),大量的免費Java入門教學(xué),歡迎線上學(xué)習(xí)!
以上是java 流區(qū)別是什麼的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

遍歷Java中的Map有三種常用方法:1.使用entrySet同時獲取鍵和值,適用於大多數(shù)場景;2.使用keySet或values分別遍歷鍵或值;3.使用Java8的forEach簡化代碼結(jié)構(gòu)。 entrySet返回包含所有鍵值對的Set集合,每次循環(huán)獲取Map.Entry對象,適合頻繁訪問鍵和值的情況;若只需鍵或值,可分別調(diào)用keySet()或values(),也可在遍歷鍵時通過map.get(key)獲取值;Java8中可通過Lambda表達(dá)式使用forEach((key,value)->

Optional能清晰表達(dá)意圖並減少null判斷的代碼噪音。 1.Optional.ofNullable是處理可能為null對象的常用方式,如從map中取值時可結(jié)合orElse提供默認(rèn)值,邏輯更清晰簡潔;2.通過鍊式調(diào)用map實現(xiàn)嵌套取值,安全地避免NPE,任一環(huán)節(jié)為null則自動終止並返回默認(rèn)值;3.filter可用於條件篩選,滿足條件才繼續(xù)執(zhí)行後續(xù)操作,否則直接跳到o??rElse,適合輕量級業(yè)務(wù)判斷;4.不建議過度使用Optional,如基本類型或簡單邏輯中其反而增加複雜度,部分場景直接返回nu

遇到j(luò)ava.io.NotSerializableException的核心解決方法是確保所有需序列化的類實現(xiàn)Serializable接口,並檢查嵌套對象的序列化支持。 1.給主類添加implementsSerializable;2.確保類中自定義字段對應(yīng)的類也實現(xiàn)Serializable;3.用transient標(biāo)記不需要序列化的字段;4.檢查集合或嵌套對像中的非序列化類型;5.查看異常信息定位具體哪個類未實現(xiàn)接口;6.對無法修改的類考慮替換設(shè)計,如保存關(guān)鍵數(shù)據(jù)或使用可序列化的中間結(jié)構(gòu);7.考慮改

在Java中,Comparable用於類內(nèi)部定義默認(rèn)排序規(guī)則,Comparator用於外部靈活定義多種排序邏輯。 1.Comparable是類自身實現(xiàn)的接口,通過重寫compareTo()方法定義自然順序,適用於類有固定、最常用的排序方式,如String或Integer。 2.Comparator是外部定義的函數(shù)式接口,通過compare()方法實現(xiàn),適合同一類需要多種排序方式、無法修改類源碼或排序邏輯經(jīng)常變化的情況。兩者區(qū)別在於Comparable只能定義一種排序邏輯且需修改類本身,而Compar

處理Java中的字符編碼問題,關(guān)鍵是在每一步都明確指定使用的編碼。 1.讀寫文本時始終指定編碼,使用InputStreamReader和OutputStreamWriter並傳入明確的字符集,避免依賴系統(tǒng)默認(rèn)編碼。 2.在網(wǎng)絡(luò)邊界處理字符串時確保兩端一致,設(shè)置正確的Content-Type頭並用庫顯式指定編碼。 3.謹(jǐn)慎使用String.getBytes()和newString(byte[]),應(yīng)始終手動指定StandardCharsets.UTF_8以避免平臺差異導(dǎo)致的數(shù)據(jù)損壞??傊?,通過在每個階段

方法引用是Java中一種簡化Lambda表達(dá)式的寫法,使代碼更簡潔。它不是新語法,而是Java8引入的Lambda表達(dá)式的一種快捷方式,適用於函數(shù)式接口的上下文。其核心在於將已有方法直接作為函數(shù)式接口的實現(xiàn)來使用。例如System.out::println等價於s->System.out.println(s)。方法引用主要有四種形式:1.靜態(tài)方法引用(ClassName::staticMethodName);2.實例方法引用(綁定到特定對象,instance::methodName);3.

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

加粗文字的快捷鍵是Ctrl B(Windows)和Command B(Mac),適用於Word、GoogleDocs、網(wǎng)頁編輯器等;若未選中文字則可能開啟加粗輸入狀態(tài);部分網(wǎng)頁工具如Gmail、Notion可能使用Ctrl Shift B;快捷鍵無效時需檢查擴(kuò)展衝突或查看網(wǎng)站文檔;其他常用格式快捷鍵包括斜體(Ctrl/Command I)、下劃線(Ctrl/Command U)、刪除線(部分編輯器支持Ctrl Shift S或自定義)。
