黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java中的io流知識總結

Java中的io流知識總結

更新時間:2022-09-26 10:07:19 來源:動力節點 瀏覽1381次

IO Fluid系統圖

IO 幾種常見的流:

I/O 流原理功能

Input/Output:輸入輸出機制

輸入機制:允許java程序從外部設備(磁盤、光盤、網絡等)獲取數據。

輸出機制:保留java程序中的數據,輸出到外部設備(磁盤、CD等)。

流量分類:

以不同的方式,您可以進行分類。

1.按功能劃分:

輸入流:只能從中讀取數據,而不是向其寫入數據。

輸出流:只能寫入數據,不能從中讀取數據。

2.按處理單元劃分

字節流和字符流的操作方式基本相同。操作的數據單位不同

字節流:操作為 8 Bytes of bits InputStream/OutputStream 作為字節流的基類

字符流:操作為 16 個字符 Reader/Writer 作為字符流的基類

關于字節流和字符流的區別?

當讀取一個字節流時,讀取一個字節并返回一個字節。字符流使用字節流讀取一個或多個字節(中文對應字節為兩個,UTF-8碼表中有三個)時,首先查看指定的

編碼表,將找到的字符返回給。

字節流可以處理所有類型的數據,例如圖片、mp3、視頻等。字符流只能處理字符數據。

字節流和輸入流均以 InputStream 結尾,字節輸出流均以 OutputStream 結尾。在 InputStream 或者 OutputStream 前面代表這個流的功能。

字符流輸入流以Reader結尾,字符輸出流以Writer結尾,同一字符流前面的字符代表流的功能。

其實字節流本身在操作的時候不會用到緩沖區,直接操作的是文件本身,但是字符流在操作的時候會用到緩沖區,文件是通過緩沖區來操作的。

用字節流還是字符流比較好?

答:字節流,因為硬盤上的所有文件都是以字節的形式傳輸或保存的,包括圖片等。但是字符流只是在內存中形成的,所以在實際開發中,字節流的使用更為廣泛。

摘要:如果是處理純文本數據,我們必須優先考慮字符流,另外,它們都使用字節流。

按角色

節點流:可以直接從/讀取到外部設備/寫入數據的流,這稱為節點流,節點流也稱為低級流。

處理流程:連接和封裝現有流程,擴展原有的讀/寫功能。處理流程也稱為高級流程。

Java 的 io 包包括 40 多個流,它們都有密切的聯系和使用規則,這些流都來自 4 個抽象基類。

InputStream/Reader:所有輸入流的基類,前者為字節輸入流,后者為字符輸入流。

OutputStream/Writer:基本上都是所有的輸出流,前者是字節輸出流,后者是字符輸出流。

... 和 、文件類

File 類起源:File Class 彌補了 IO 流的不足,IO 只能操作數據,但不能對文件的信息進行操作,操作文件必須使用 File 類(Java File類概述)。

功能 :

一個。您可以將文件或文件夾拆分為程序中的對象。

灣。方便操作文件或文件夾中的屬性信息。

C。File Class 通常通過構造函數作為參數傳遞給流的對象。

File類的常用方法:

1.構造方法:

File(String pathname):這種構造可以將現有或不存在的文件或文件夾封裝成 File 的對象,pathname 文件的路徑。

File(File parent,String child):parent by child 文件的路徑。

(1)文件路徑

文件 f6 = 新文件(“c:\java”,“jre7”);

//file 的 toString 方法被覆蓋,無論打包地址打印

//'/' 和 '\' 所有目錄分隔符,在其他系統中,目錄分隔符可以改變,這樣寫不利于跨平臺操作 // 最好使用 File分隔符 Segmentation 中提供的字段。

(2)創建文件相關功能:

createNewFile():創建相關文件。并返回布爾值

createTemFile(): 在默認臨時文件目錄下創建一個空文件,程序運行后不存在。

mkdirs():創建目錄,如果你寫的目錄的父目錄不存在。他會幫你創作。

(3)刪除文件相關功能:

delete():刪除空目錄或文件(ps只能是空目錄)

deleteOnExit():虛擬機終止時刪除文件。

(4)裁判:

exists() :判斷文件或文件夾是否存在。

canExecute() :判斷文件是否可執行,跟操作系統有關。

canRead() : 判斷文件是否可讀

canWrite() : 判斷文件是否可寫

equals(Object obj) : 測試抽象路徑名是否等于給定的對象。

isAbsolute() :測試這個抽象路徑名是否是絕對路徑名。

isDirectory() :判斷文件對象代表一個文件夾。

isFile() : 判斷文件對象代表一個文件

isHidden() : 判斷文件對象是否為隱藏文件

(5)獲取文件對象屬性信息的方法:

getAbsoluteFile() :返回這個抽象路徑名的絕對路徑名形式。

getAbsolutePath() :返回這個抽象路徑名的絕對路徑名字符串。

getCanonicalFile() :返回這個抽象路徑名的規范形式。

getCanonicalPath() :返回此抽象路徑名的規范路徑名字符串。

getPath() :將此抽象路徑名轉換為路徑名字符串。

getName() :返回此抽象路徑名表示的文件或目錄的名稱。

getParent() :返回此抽象路徑名的父目錄的路徑名字符串;如果沒有為此路徑名指定父目錄,則返回null。

getParentFile() :返回此抽象路徑名的父目錄的抽象路徑名;如果沒有為此路徑名指定父目錄,則返回null。

getTotalSpace() :返回指定路徑的總空間中的字節數

getFreeSpace() :返回此抽象路徑名指定的分區中未分配的字節數。

getUsableSpace() :返回此抽象路徑名指定的分區上此虛擬機可用的字節數。

renameTo(File dest) :重命名此抽象路徑名表示的文件。剪切

(6)如何設置文件信息:

setExecutable(boolean executable) :設置文件可執行方法

setLastModified(long time) :設置此抽象路徑名指定的文件或目錄的最后修改時間。

setReadable(boolean readable) : 設置文件是否可讀

setReadOnly() : 設置文件是否只讀

setWritable(boolean writable) : 設置文件是否可寫

(7)如何獲取文件的一般信息:

lastModified() :獲取文件的最后修改時間

length() :返回這個抽象路徑名所代表的文件的長度。

(8)如何操作文件夾

list():將文件夾中包含的目錄和文件存儲到字符串數組中。

listFiles():列出文件夾中包含的目錄和文件,存放在 File 數組中。

listRoots():列出可用的文件系統根目錄。

(9)文件過濾器: FileFilter

布爾接受(文件路徑名);該接口的一個實例可以用來傳遞給 File 類的 listFiles(FileFilter) 方法,用來返回滿足過濾器要求的子

文件 File [] listFiles(FileFilter filter)

IO Streams按功能分類

1. 節點流

字節數組流(內存流)

ByteArrayInputStream

ByteArrayOutputStream

因為內存輸出流中有新的方法,不要使用多態,不能讓父類的引用指向那樣的東西。

效果:循環中可以將所有數據存儲在一個統一的容器中,然后在循環結束時,可以一起取出容器中的所有內容。

注意事項:

內存流屬于內存中的資源,所以不要過度,如果太大,會出現內存溢出錯誤。

2. 緩沖流量

緩沖字節流

BufferedInputStream

BufferedOutputStream

緩沖字符流

BufferedReader

BufferedWriter

處理流包含節點流,節點流決定與之通信的外部設備,處理流增加其功能。

緩沖流的好處:

緩沖流里面包含一個緩沖區,默認8kb,每次程序調用read方法實際上都是從緩沖區中讀取內容,如果讀取失敗

則說明緩沖區中沒有內容,然后從數據源,然后將盡可能多的字節讀取并放入緩沖區,

最后將緩沖區的內容,全部返回給程序。

從緩沖區讀取數據比直接從數據源讀取數據要快,效率更高,性能更好。

簡而言之:

沒有緩存,那么每讀一次,就會發送一次IO操作;有一個緩沖區,第一次讀的時候,我會讀x個字節到緩存中,

然后read會從緩存中讀取,當讀到緩沖區結束時,會再讀x個字節到緩存中。

流處理數據的方法與節點流處理方法基本相同。

3. 轉化流量

轉換流功能:將字節流轉換為字符流,可以解決編碼集和解碼集造成的亂碼問題。

輸入流讀取器:

輸出流編寫器:

code : character —– 編碼字符集 ——–》 二進制

decode : 二進制——解碼字符集 ———》 字符

在處理文件時,如果文件的字符格式與編譯器的不同,就會出現亂七八糟的情況。比如文件字符格式GBK,

而編譯器是UTF-8格式,那么問題就來了。

亂碼問題的原因:

(1)編碼和解碼字符集不一致導致亂碼

(2)丟失字節,丟失長度

大多數情況下,出現亂碼問題的原因是漢字,因為漢字在不同的字符碼中占用不同的字節,但都占用多個字節。

而英文字母則沒有這個問題,因為英文字母在所有字符編碼中占據一個字節。

InputStreamReader : Transform the input stream –》 Convert byte input stream to character input stream

效果:為了防止文件使用字符輸入流處理出現亂碼問題。

4.數據處理流程

DataOutputStream

DataInputStream

特性:可以保存數據本身,并且可以保存數據類型(基本數據類型+String)

5.序列化流程

將對象轉化為字節序列的過程,就是對象序列化的過程。

將字節序列恢復到對象的過程稱為對象反序列化。

效果:保持對象(引用數據類型data)類型+數據。

序列化流程: 輸出流 ObjectOutputStream writeObject()

反序列化流:輸入流 ObjectInputStream readObject()

注意事項:

先序列化,再反序列化,并且反序列化的順序必須和序列化的順序一致。

并非所有對象都可以序列化。只有當 Serializable 接口類的對象才能被序列化。

并非對象中的所有屬性都可以序列化。

對象序列化的主要目的:

將對象轉換為字節序列,保存到硬盤,持久化存儲,通常保存為文件。

在網絡上傳遞的是對象的字節序列

對象序列化步驟:

創建對象輸出流,其他輸出節點流可以包含在構造方法中,如文件輸出流。

將對象通過 writeObject 來寫入。

對象反序列化步驟:

創建對象輸入流,構造方法中可以包含其他輸入節點流,如文件輸入流

通過 readObject() 方法讀取對象。

serialVersionUID : 序列化版本 id

效果:字面意思,就是序列號。一切都實現了 Serializable 接口的類,會有一個默認的靜態序列化ID。

不同版本之間的類,可以解決序列化兼容性的問題,如果一個對象在之前的版本中保存在一個文件中,那么版本升級后,如果序列化id一致,我們可以認為文件中的對象還是對象這種。

如果類不希望不同版本之間兼容,但是我們也希望類的對象是有序的,那么在不同的版本id中使用不同的序列化。

瞬態:當類中有不想被序列化的屬性時,所以使用這個修飾符來修改。

以上就是關于“Java中的io流知識總結”介紹,對于初學者來說,可以看看本站的Java IO流的分類,對IO流有一個初步的認識,這樣在以后的學習中會更加順暢。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 欧美v日本| 日日噜噜夜夜狠狠 | 国产精品视频国产永久视频 | 涩视频成人永久免费观看网站 | 全免费午夜一级毛片一级毛 | 成人欧美一区在线视频在线观看 | 一 级 黄 色 片生活片 | 成年美女黄网站色大免费视频 | h视频免费在线 | 丝袜制服第一页 | www.九九| 日韩在线www | 欧美黑人粗暴另类多交 | 欧美精品一区二区三区四区 | 美女福利视频导航 | 91精品乱码一区二区三区 | 黄色的视频免费看 | 一级毛片ab片高清毛片 | 成年午夜性爽快免费视频不卡 | 天天操夜夜嗨 | 中文字幕日韩一区二区不卡 | 免费乱理伦片在线观看影院 | 久久99毛片免费观看不卡 | 好吊日在线观看 | 久久精品一区二区三区不卡牛牛 | 91看片在线 | 色迷迷网免费站视频在线观看 | 精品 日韩 国产 欧美在线观看 | 91视频麻豆视频 | 国产一国产一级新婚之夜 | 巨胸喷奶水www久久久免费观看 | 亚洲香蕉一区二区三区在线观看 | 精品国内自产拍在线视频 | 成人日b视频 | 丁香六月综合激情 | 黄色一级一级 | 中文字幕在线观看网站 | 欧美日韩国产另类一区二区三区 | 亚欧乱色视频 视频在线 | 最近中文字幕在线播放 | 成人在线免费 |