国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java基礎篇---I/O技術(三)

2019-11-14 23:10:12
字體:
來源:轉載
供稿:網友
java基礎篇---I/O技術(三)

接上一篇java基礎篇---I/O技術(二)

Java對象的序列化和反序列化什么叫對象的序列化和反序列化

要想完成對象的輸入或輸出,還必須依靠對象輸出流(ObjectOutputStream)和對象輸入流(ObjectInputStream)。使用對象輸出流輸出序列化對象的步驟,有時也成序列化,而使用對象輸入流讀入對象的過程,有時也稱為反序列化

一個對象產生之后實際上是在內存中為其開辟了一個存儲空間,方便存儲信息、

對象序列化就是把一個對象變成二進制的數據流的一個方法,通過對象序列化可以反駁的實現對象的傳輸或存儲。

注意:如果一個類的對象想被序列化,則對象所在的類必須實現java.io.Serializable接口

對象序列化的用途
  • 持久性:把對象的字節序列永久保存到硬盤上,通常存放在一個文件中,比如:休眠的實現,以后服務器session管理,Hibernate將對象持久化實現。
  • 網絡通信:在網絡上傳送對象的字節序列,比如:服務器之間的數據通信,對象傳遞
seriaVersionUID

在對象進行序列化或反序列胡操作時,要考慮JDK版本問題,如果序列化的JDK和反序列化的JDK版本不統一就可能出現異常,所以在序列操作中引入一個seriaVersionUID常量,來驗證版本的一致性。

對象序列化及反序列化操作

對象序列化依靠ObjectOutputStream,對象反序列化依靠ObjectInputStream

序列化:ObjectOutputStream

直接用實例

import java.io.File ;import java.io.FileOutputStream ;import java.io.OutputStream ;import java.io.ObjectOutputStream ;public class ObjectOutputStream{    public static void main(String args[]) throws Exception {        File f = new File("D:" + File.separator + "test.txt") ;    // 定義保存路徑        ObjectOutputStream oos = null ;    // 聲明對象輸出流        OutputStream out = new FileOutputStream(f) ;    // 文件輸出流        oos = new ObjectOutputStream(out) ;        oos.writeObject(new Person("張三",30)) ;    // 保存對象        oos.close() ;    // 關閉    }};
反序列化:ObjectInputStream
import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.io.ObjectInputStream ;public class ObjectInputStream{    public static void main(String args[]) throws Exception {        File f = new File("D:" + File.separator + "test.txt") ;    // 定義保存路徑        ObjectInputStream ois = null ;    // 聲明對象輸入流        InputStream input = new FileInputStream(f) ;    // 文件輸入流        ois = new ObjectInputStream(input) ;    // 實例化對象輸入流        Object obj = ois.readObject() ;    // 讀取對象        ois.close() ;    // 關閉        System.out.PRintln(obj) ;    }};
transient關鍵字

在序列化操作中,如果某個屬性不希望被序列化下來,可以使用transient關鍵字聲明

Java I/O---回退流

回退:給了用戶第二次讀的機會。

回退流

在java IO中多有的數據都是采用順序的讀取方式,即對于一個輸入流來講都是采用從頭到尾順序讀取的,如果在輸入流中某個不需要的內容被讀取進來,則只能通過程序將這些不需要的內容處理掉,為了解決這一的讀取問題,在java中提供了一中回退輸入流(PushbackInputStream,PushbackReader),可以吧讀取進來的某些數據重寫退回到輸入流的緩沖區之中。

使用InputStream要使用read()方法不斷讀取,是采用順序的讀取方式。

回退流操作機制

PushbackInputStream類的常用方法

import java.io.ByteArrayInputStream ;import java.io.PushbackInputStream ;public class PushInputStreamDemo{    public static void main(String args[]) throws Exception {    // 所有異常拋出        String str = "www.mldnjava.cn" ;        // 定義字符串        PushbackInputStream push = null ;        // 定義回退流對象        ByteArrayInputStream bai = null ;        // 定義內存輸入流        bai = new ByteArrayInputStream(str.getBytes()) ;    // 實例化內存輸入流        push = new PushbackInputStream(bai) ;    // 從內存中讀取數據        System.out.print("讀取之后的數據為:") ;        int temp = 0 ;         while((temp=push.read())!=-1){    // 讀取內容            if(temp=='.'){    // 判斷是否讀取到了“.”                push.unread(temp) ;    // 放回到緩沖區之中                temp = push.read() ;    // 再讀一遍                System.out.print("(退回"+(char)temp+")") ;            }else{                System.out.print((char)temp) ;    // 輸出內容            }        }    }};


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 夏河县| 新津县| 哈巴河县| 禄丰县| 榆中县| 报价| 崇仁县| 诸暨市| 孟连| 富裕县| 水富县| 卓尼县| 弥渡县| 北宁市| 扶沟县| 广汉市| 临澧县| 县级市| 淮北市| 娱乐| 大足县| 乐安县| 柳江县| 温宿县| 新乐市| 彩票| 梓潼县| 林州市| 上栗县| 平泉县| 舟曲县| 钟山县| 隆安县| 富源县| 福海县| 红原县| 获嘉县| 姜堰市| 本溪市| 雅安市| 文水县|