摘要:字節(jié)流可以處理所有以為單位存儲(chǔ)的文件,也就是說(shuō)可以處理所有的文件,但是在處理字符的速度上不如字符流。文件字節(jié)輸入流的讀取時(shí),是直接同字節(jié)流中讀取的。原理就是在字節(jié)流的基礎(chǔ)上增加了編解碼的操作。
前言
流是干什么的:為了永久性的保存數(shù)據(jù)。
IO流用來(lái)處理設(shè)備之間的數(shù)據(jù)傳輸(上傳和下載文件)
java對(duì)數(shù)據(jù)的操作是通過(guò)流的方式。
java用于操作流的對(duì)象都在IO包中。
java IO系統(tǒng)的學(xué)習(xí),本質(zhì)上就是對(duì)文件的讀寫操作。
File類java中使用File來(lái)抽象一個(gè)文件,無(wú)論是普通文件還是目錄,都可應(yīng)對(duì)與一個(gè)File對(duì)象。
File只是抽象的代表來(lái)磁盤上的某個(gè)文件或者目錄,內(nèi)部實(shí)際上是依賴一個(gè)平臺(tái)無(wú)關(guān)的本地文件系統(tǒng)類。
File無(wú)法對(duì)其所表示的文件內(nèi)容進(jìn)行任何讀寫操作(那是流做的事情)。
成員方法:
(1)創(chuàng)建功能: 【1】public boolean createNewFile() 【2】public boolean mkdir() 【3】public boolean mkdirs() (2)刪除功能:public boolean delete() (3)重命名功能:public boolean renameTo(File dest) (4)判斷功能: 【1】public boolean isDirectory() 【2】public boolean isFile() 【3】public boolean exists() 【4】public boolean canRead() 【5】public boolean canWrite() 【6】public boolean isHidden() (5)獲取功能: 【1】public String getAbsolutePath() 【2】public String getPath() 【3】public String getName() 【4】public long length() 【5】public long lastModified() (6)高級(jí)獲取功能: 【1】public String[] list() 【2】public File[] listFiles()流的分類
根據(jù)數(shù)據(jù)流向的不同分為輸入流和輸出流。
根據(jù)處理數(shù)據(jù)類型的不同分為字節(jié)流和字符流:
(1)字符流:顧名思義,該流只能處理字符,但處理字符速度很快。 (2)字節(jié)流:可以處理所有以bit為單位存儲(chǔ)的文件,也就是說(shuō)可以處理所有的文件,但是在處理字符的速度上不如字符流。
字符流的抽象基類:
(1)Reader:字符輸入流的抽象類,所有字符輸入流的實(shí)現(xiàn)都是它的子類 (2)Writer:字符輸出流的抽象類,所有字符輸出類的實(shí)現(xiàn)都是它的子類
字節(jié)流的抽象基類:
(1)InputStream:字節(jié)輸入流的抽象類,是所有字節(jié)輸入流的父類 (2)OutputStream:字節(jié)輸出流的抽象類,是輸出字節(jié)流的所有類的超類
字符流Reader派生的子類:
(1)CharArrayReader (2)BufferedReader/LineNumberReader (3)FilterReader (4)InputStreamReader/FileReader
字符流Writer派生的子類:
(1)BufferedWriter (2)CharArrayWriter (3)FilterWriter (4)OutputStreamWriter/FileWriter (5)PrintWriter (6)StringWriter
字節(jié)流InputStream派生的子類:
(1)FileInputStream (2)ObjectInputStream (3)FilterInputStream/BufferedInputStream/DataInputStream/PushbackInputStream (4)SequenceInputStream (5)ByteArrayInputStream (6)StringBufferInputStream)
字節(jié)流OutputStream派生的類:
(1)ByteArrayOutputStream (2)FileOutputStream (3)FilterOutputStream/BufferedOutputStream/DataOutputStream (4)ObjectOutputStream優(yōu)化讀寫:字節(jié)緩沖流
字節(jié)流一次讀寫一個(gè)數(shù)組的速度明顯比一次讀寫一個(gè)字節(jié)的速度快很多。這是加入了數(shù)組這樣的緩沖區(qū)效果。
文件字節(jié)輸入流的讀取時(shí),是直接同字節(jié)流中讀取的。
由于字節(jié)流是與硬件(存儲(chǔ)介質(zhì))進(jìn)行的讀取,所以速度較慢。
而cpu需要使用數(shù)據(jù)時(shí)通過(guò)read()、read(byte[])讀取數(shù)據(jù)時(shí)就要受到硬件IO的慢速度限制。
cpu與內(nèi)存發(fā)生的讀寫速度比硬件IO快10倍不止,那么就可以在內(nèi)存建立緩沖區(qū)優(yōu)化。
優(yōu)化讀寫的思路:
(1)在內(nèi)存中建立緩沖區(qū) (2)先把存儲(chǔ)介質(zhì)中的字節(jié)讀取到緩沖區(qū) (3)cpu需要數(shù)據(jù)時(shí)直接從緩沖區(qū)讀取 (4)緩沖區(qū)要足夠大,在被讀完后又觸發(fā)fill()函數(shù)自動(dòng)從存儲(chǔ)介質(zhì)的文件字節(jié)內(nèi)容中讀取字節(jié)存儲(chǔ)到緩沖區(qū)數(shù)組。轉(zhuǎn)換流
轉(zhuǎn)換流是字節(jié)流通向字符流的橋梁,可以將字節(jié)流轉(zhuǎn)換為字符流。
原理就是在字節(jié)流的基礎(chǔ)上增加了編解碼的操作。
字符流 = 字節(jié)流 + 編碼表
FileReader、FileWriter其實(shí)底層都是字節(jié)流,只不過(guò)額外的配置一個(gè)編碼器、解碼器,底層用字節(jié)讀數(shù)據(jù)通過(guò)解碼器轉(zhuǎn)換成字符,或通過(guò)編碼器將字符轉(zhuǎn)換為字節(jié)再輸出。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77111.html
摘要:除非文件用自帶的記事本打開我們能夠讀懂,才采用字符流,否則建議使用字節(jié)流。 第四階段 IO IO流 前言: 前面的學(xué)習(xí)我們只能夠在已有的一定封閉范圍內(nèi)進(jìn)行一些操作,但是這顯然是無(wú)趣的,也是不支持我們實(shí)現(xiàn)一些復(fù)雜的需求,所以Java提供IO流這樣一種概念,方便我們對(duì)數(shù)據(jù)進(jìn)行操作 而使用IO流我們可以實(shí)現(xiàn)一些強(qiáng)大的功能,例如針對(duì)文件的移動(dòng)復(fù)制等操作,又或者程序與外部文件之間的數(shù)據(jù)存儲(chǔ)或者讀...
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄?,我的目?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:字符轉(zhuǎn)換流原理字節(jié)流編碼表。和作為子類,僅作為操作字符文件的便捷類存在。源目的先根據(jù)需求明確要讀,還是要寫。屏幕網(wǎng)絡(luò)完全可以明確具體要使用哪個(gè)流對(duì)象。明確四是否需要額外功能呢額外功能轉(zhuǎn)換嗎轉(zhuǎn)換流。高效嗎緩沖區(qū)對(duì)象。 01轉(zhuǎn)換流概述 * A: 轉(zhuǎn)換流概述 * a: 轉(zhuǎn)換流概述 * OutputStreamWriter 是字符流通向字節(jié)流的橋梁:可使用指定的字符編碼...
摘要:學(xué)習(xí)筆記二流的概念在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時(shí)候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)的時(shí)候,就要使用輸出流完成。主要功能是向文件中寫入內(nèi)容構(gòu)造函數(shù)根據(jù)給定的對(duì)象構(gòu)造一個(gè)對(duì)象。 Java IO學(xué)習(xí)筆記二 流的概念 在程序中所有的數(shù)據(jù)都是以流的方式進(jìn)行傳輸或保存的,程序需要數(shù)據(jù)的時(shí)候要使用輸入流讀取數(shù)據(jù),而當(dāng)程序需要將一些數(shù)據(jù)保存起來(lái)...
摘要:在中,對(duì)象的序列化與反序列化被廣泛應(yīng)用到遠(yuǎn)程方法調(diào)用及網(wǎng)絡(luò)傳輸中。相關(guān)接口及類為了方便開發(fā)人員將對(duì)象進(jìn)行序列化及反序列化提供了一套方便的來(lái)支持。未實(shí)現(xiàn)此接口的類將無(wú)法使其任何狀態(tài)序列化或反序列化。 序列化與反序列化 序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程。一般將一個(gè)對(duì)象存儲(chǔ)至一個(gè)儲(chǔ)存媒介,例如檔案或是記億體緩沖等。在網(wǎng)絡(luò)傳輸過(guò)程中,可以...
閱讀 2986·2021-11-23 09:51
閱讀 3259·2021-11-12 10:36
閱讀 3271·2021-09-27 13:37
閱讀 3240·2021-08-17 10:15
閱讀 2652·2019-08-30 15:55
閱讀 2836·2019-08-30 13:07
閱讀 852·2019-08-29 16:32
閱讀 2697·2019-08-26 12:00