日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重要接口—Serializable接口

發(fā)布時間:2024/4/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重要接口—Serializable接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文作者:流氓小伙子

原文地址:java中類實現(xiàn)Serializable接口的原因

背景:

一個java中的類只有實現(xiàn)了Serializable接口,它的對象才是可序列化的。如果要序列化某些類的對象,這些類就必須實現(xiàn)Serializable接口。Serializable是一個空接口,沒有什么具體內(nèi)容,它的目的只是簡單的標(biāo)識一個類的對象可以被序列化。源碼如下:

//標(biāo)識接口:空接口 //標(biāo)志接口的作用:讓JVM去實現(xiàn) public interface Serializable{}

為什么要實現(xiàn)Serializable接口?

為了保存在內(nèi)存中的各種對象的狀態(tài)(也就是實例變量,不是方法),并且可以把保存的對象狀態(tài)再讀出來,這是java中的提供的保存對象狀態(tài)的機(jī)制—序列化。

在什么情況下需要使用到Serializable接口呢??

  • 當(dāng)想把的內(nèi)存中的對象狀態(tài)保存到一個文件中或者數(shù)據(jù)庫中時候;?
  • 當(dāng)想用套接字在網(wǎng)絡(luò)上傳送對象的時候;?
  • 當(dāng)想通過RMI傳輸對象的時候; ?

serialVersionUID?

serialVersionUID的取值是Java運行時環(huán)境根據(jù)類的內(nèi)部細(xì)節(jié)自動生成的。如果對類的源代碼作了修改,再重新編譯,新生成的類文件的serialVersionUID的取值有可能也會發(fā)生變化。類的serialVersionUID的默認(rèn)值完全依賴于Java編譯器的實現(xiàn),對于同一個類,用不同的Java編譯器編譯,有可能會導(dǎo)致不同的serialVersionUID,也有可能相同。為了提高serialVersionUID的獨立性和確定性,強(qiáng)烈建議在一個可序列化類中顯示的定義serialVersionUID,為它賦予明確的值。顯式地定義serialVersionUID有兩種用途:?

  • 在某些場合,希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有相同的serialVersionUID;?
  • 在某些場合,不希望類的不同版本對序列化兼容,因此需要確保類的不同版本具有不同的serialVersionUID。

代碼實現(xiàn):?在這里 定義一個實現(xiàn)了Serializable接口的Person類

import java.io.Serializable;public class Person implements Serializable {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

再定義一個SerializationUtils類來模擬 序列化和反序列化的過程

import java.io.*;public class SerializationUtils {private static String FILE_NAME = "f:/obj";//序列化 寫的過程public static void write(Serializable s){try {ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(FILE_NAME));objectOutputStream.writeObject(s);objectOutputStream.close();} catch (IOException e) {e.printStackTrace();}}//反序列化 讀的過程public static Object read(){Object obj=null;// 反序列化try {ObjectInput input = new ObjectInputStream(new FileInputStream(FILE_NAME));obj = input.readObject();input.close();} catch (Exception e) {e.printStackTrace();}return obj;} }

測試函數(shù)

import com.txp.SerializationUtils; import org.junit.Test;public class testSerializable {@Testpublic void testWrite(){Person person=new Person();person.setId(1);person.setName("張丹");SerializationUtils.write(person);}@Testpublic void testRead(){Person p = (Person) SerializationUtils.read();System.out.println(p.getName());} }

先運行testWrite()實現(xiàn)序列化持久化,再運行testRead()實現(xiàn)反序列化讀出數(shù)據(jù) ,這一次的Person類中沒有給定serialVersionUID,結(jié)果會輸出‘張丹’。如果此時給Person類加一個屬性 age,運行testRead(),會拋出會拋出 java.io.InvalidClassException異常。因為JVM在反序列化時,會比較數(shù)據(jù)流中的serialVersionUID與類的serialVersionUID是否相同,如果相同,則認(rèn)為類沒有發(fā)生改變,可以把數(shù)據(jù)流load為實例對象;如果不相同,對不起,JVM會拋異常InvalidClassException,這是JVM一個很好的一個校驗機(jī)制,確保類的一致性。但是如果顯式給定serialVersionUID(而隱式聲明則是我不聲明,編譯器在編譯的時候幫我生成。),即是 private static final long serialVersionUID = XXL;,修改Person類如下:

public class Person implements Serializable {private static final long serialVersionUID = 1L;private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

再進(jìn)行同樣的操作過程,則不會拋出異常,會打印出結(jié)果。但是最好不要這樣操作,要在類修改后,先序列化,再但序列化。確保類的前后一致性。?

參考文章:?
https://www.cnblogs.com/yoohot/p/6019767.html?
https://blog.csdn.net/jaryle/article/details/52598296?
http://www.cnblogs.com/DreamDrive/p/5412931.html

總結(jié)

以上是生活随笔為你收集整理的重要接口—Serializable接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 葵司av在线| 麻豆蜜桃在线观看 | 亚洲aaaaaaa| 国产精品一区二区三区久久 | 亚洲人和日本人hd | 久久精品久久精品久久精品 | 亚洲一区二区观看播放 | 亚洲激情视频 | 精品视频在线观看一区 | 中文字幕日韩精品亚洲一区小树林 | 天天艹日日干 | 日韩一区二区视频 | 在线观看h视频 | 欧美情爱视频 | 午夜在线一区二区 | av免费网站观看 | 日韩精品一区二区三区中文在线 | 日本视频一区二区三区 | 在线视频亚洲色图 | av2014天堂| 中文字幕有码在线播放 | 亚洲一区电影 | 国产又粗又猛又爽又黄91精品 | 日韩av三区 | 精品国产99一区二区乱码综合 | 爱情岛论坛自拍亚洲品质极速最新章 | 亚洲在线第一页 | 99久久99久久精品国产片果冰 | 侵犯女教师一区二区三区 | 天堂av亚洲 | 四虎影院永久地址 | 亚洲欧美日韩国产精品 | 91呦呦 | 日韩有码在线观看 | 情五月 | 欧洲精品一区二区 | 两性囗交做爰视频 | 日韩xx视频 | 亚洲一二区在线 | 欧美另类videosbestsex日本 | 张柏芝亚洲一区二区三区 | 国产一区二区欧美 | 爱爱免费小视频 | 91干网 | 97精品人妻一区二区三区 | 日本久久伊人 | h片观看 | 在线观看你懂得 | 99在线观看免费视频 | 精品成人18 | 91综合视频 | 夜夜夜影院 | 手机在线观看毛片 | 免费av在线播放网址 | 91肉色超薄丝袜脚交一区二区 | 九九在线| 美乳人妻一区二区三区 | 瑟瑟视频免费观看 | 日本中文字幕在线视频 | 欧美午夜精品久久久久久孕妇 | 国产精品4p | 欧美播放器 | 欧美精品一区在线发布 | 自拍视频在线播放 | 久久精品免费在线 | 少妇被躁爽到高潮无码人狍大战 | 日韩精品一区二区三区av | 久久蜜桃av一区二区天堂 | 激情婷婷网| 老司机午夜福利视频 | 日日综合网 | 丰满人妻一区二区三区免费 | 色婷婷综合网 | 亚洲成a人片77777精品 | 精品视频一区二区 | 黄色av网页 | 色哟哟精品观看 | 精品国产一区二区三 | 精品福利三区3d卡通动漫 | 奇米影视狠狠干 | 黄色欧美网站 | 日韩小视频网站 | 亚洲精品一区二区三区区别 | 午夜精品久久久久久久蜜桃 | 色欲久久久天天天综合网 | 麻豆91网站| 图片区视频区小说区 | 最近中文字幕在线mv视频在线 | 免费福利小视频 | 神马午夜嘿嘿 | 国产三级在线观看视频 | 精品人伦一区二区 | a一级黄色 | 深夜av在线| 抖音视频在线观看 | 国产ts丝袜人妖系列视频 | 亚洲自拍偷拍av | www.色综合 | 先锋资源一区二区 |