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