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