IO流以及他们的种类区别 序列化反序列化 如何实现
Java 中有幾種類型的流
FileReader)和處理流(是對(duì)一個(gè)已存在的流的連接和封裝,通過(guò)所封裝的流的功能調(diào)用實(shí)現(xiàn)數(shù)據(jù)讀寫。如
BufferedReader。處理流的構(gòu)造方法總是要帶一個(gè)其他的流對(duì)象做參數(shù)。一個(gè)流對(duì)象經(jīng)過(guò)其他流的多次包裝,稱為流的鏈接。)
InputStreamReader 和 OutputStreamWriter。
字節(jié)流如何轉(zhuǎn)為字符流
字節(jié)輸入流轉(zhuǎn)字符輸入流通過(guò) InputStreamReader 實(shí)現(xiàn),該類的構(gòu)造函數(shù)可以傳入 InputStream 對(duì)象。
字節(jié)輸出流轉(zhuǎn)字符輸出流通過(guò) OutputStreamWriter 實(shí)現(xiàn),該類的構(gòu)造函數(shù)可以傳入 OutputStream 對(duì)象。
字節(jié)流和字符流的區(qū)別
- 字節(jié)流讀取的時(shí)候,讀到一個(gè)字節(jié)就返回一個(gè)字節(jié); 字符流使用了字節(jié)流讀到一個(gè)或多個(gè)字節(jié)(中文對(duì)應(yīng)的字節(jié)數(shù)是兩個(gè),在 UTF-8 碼表中是 3個(gè)字節(jié))時(shí)。先去查指定的編碼表,將查到的字符返回。 字節(jié)流可以處理所有類型數(shù)據(jù),如:圖片,MP3,AVI 視頻文件,而字符流只能處理字符數(shù)據(jù)。只要是處理純文本數(shù)據(jù),就要優(yōu)先考慮使用字符流,除此之外都用字節(jié)流。字節(jié)流主要是操作 byte 類型數(shù)據(jù),以 byte 數(shù)組為準(zhǔn),主要操作類就是 OutputStream、InputStream。
- 字符流處理的單元為 2 個(gè)字節(jié)的 Unicode 字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為 1 個(gè)字節(jié),操作字節(jié)和字節(jié)數(shù)組。所以字符流是由 Java 虛擬機(jī)將字節(jié)轉(zhuǎn)化為 2 個(gè)字節(jié)的 Unicode 字符為單位的字符而成的,所以它對(duì)多國(guó)語(yǔ)言支持性比較好!如果是音頻文件、圖片、歌曲,就用字節(jié)流好點(diǎn),如果是關(guān)系到中文(文本)的,用字符流好點(diǎn)。在程序中一個(gè)字符等于兩個(gè)字節(jié),java 提供了 Reader、Writer 兩個(gè)專門操作字符流的類。
什么是序列化
序列化就是一種處理對(duì)象流的一種機(jī)制
所謂對(duì)象流,就是將對(duì)象的內(nèi)容進(jìn)行流化處理,可以對(duì)流化后的內(nèi)容進(jìn)行讀寫操作,或者是用于傳輸在網(wǎng)絡(luò)之間
實(shí)際過(guò)程就是將java對(duì)象轉(zhuǎn)換為字節(jié)序列的過(guò)程,
反序列化就是將字節(jié)序列恢復(fù)成java對(duì)象的過(guò)程
如何實(shí)現(xiàn)序列化
要想實(shí)現(xiàn)序列化,那么該類必須要實(shí)現(xiàn)Serializable接口,不過(guò)該接口沒有需要實(shí)現(xiàn)的方法,也就是該接口中沒有抽象方法,它只不過(guò)是起到了一種標(biāo)記的作用,標(biāo)記該類需要被序列化,然后用輸出流來(lái)構(gòu)造一個(gè)ObjectOutputStream對(duì)象,然后使用該對(duì)象的writeObject方法,就可以將作為參數(shù)的對(duì)象寫出,反之,要恢復(fù)的話就用輸入流
總結(jié)
以上是生活随笔為你收集整理的IO流以及他们的种类区别 序列化反序列化 如何实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 创建对象的四种方式
- 下一篇: List Set Map的区别