序列化與反序列化

場(chǎng)景:項(xiàng)目中,將對(duì)象序列化,base64編碼,存入到redis緩存中。使用時(shí)在反序列化取出來(lái)。
問題:對(duì)象增加新的基本類型屬性long類型。對(duì)于使用沒有該屬性的對(duì)象序列化的結(jié)果能否被反序列化初始這個(gè)屬性。

基本類型

1、序列初始化時(shí),將手機(jī)發(fā)送時(shí)間sendTime相關(guān)屬性以及下文測(cè)試方法的步驟2注釋掉。
2、運(yùn)行測(cè)試樣例,生成sms.txt文件。
3、取消注釋,將測(cè)試方法的步驟1注釋掉。
4、運(yùn)行測(cè)試樣例,看控制臺(tái)打印信息。

package study.java.Serializable;

import java.io.Serializable;

public class MessageValue implements Serializable {

    private static final long serialVersionUID = -4387708091987654321L;
    // 手機(jī)短信驗(yàn)證碼
    private String code;

    // 手機(jī)短信發(fā)送時(shí)間
    private long sendTime;

    //驗(yàn)證次數(shù)
    private int validateCount;

    public MessageValue(){

    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public long getSendTime() {
        return sendTime;
    }

    public void setSendTime(long sendTime) {
        this.sendTime = sendTime;
    }


    public int getValidateCount() {
        return validateCount;
    }

    public void setValidateCount(int validateCount) {
        this.validateCount = validateCount;
    }

}

package study.java.Serializable;

import java.io.*;

public class SerializableTest  {
    public static void main(String[] args) throws Exception {
       //步驟1
        serializeMessageValue();
        //步驟2
        MessageValue messageValue = deserializeMessageValue();
        StringBuilder sb = new StringBuilder();
        System.out.println(messageValue.getLastSendTime());

    }

    /**
     * 序列化
     */
    private static void serializeMessageValue() throws IOException {
        MessageValue messageValue=new MessageValue();
        messageValue.setCode("123456");
        messageValue.setValidateCount(1);
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("d:/sms.txt")));
        oos.writeObject(messageValue);
        System.out.println("對(duì)象序列化成功!");
        oos.close();
    }

    /**
     * 反序列化
     */
    private static MessageValue deserializeMessageValue() throws Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("d:/sms.txt")));
        MessageValue mess = (MessageValue) ois.readObject();
        System.out.println("對(duì)象反序列化成功!");
        return mess;
    }
}

結(jié)論

打印初始對(duì)象long為0。證明可以得到該屬性,并且該屬性被初始為0,不會(huì)產(chǎn)生異常。

注:自己設(shè)置一個(gè) serialVersionUID,否則jvm自動(dòng)分配,報(bào)非法異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、 序列化和反序列化概念 Serialization(序列化)是一種將對(duì)象以一連串的字節(jié)描述的過程;反序列化de...
    步積閱讀 1,493評(píng)論 0 10
  • 引言 將 Java 對(duì)象序列化為二進(jìn)制文件的 Java 序列化技術(shù)是 Java 系列技術(shù)中一個(gè)較為重要的技術(shù)點(diǎn),在...
    xdoyf閱讀 579評(píng)論 0 0
  • 公眾號(hào):追風(fēng)棧Binary 我們通過文本或者數(shù)據(jù)庫(kù)的方式來(lái)永久化存儲(chǔ)程序中產(chǎn)生的數(shù)據(jù)。這種思路也可以借鑒到保存Ja...
    windytouch閱讀 550評(píng)論 0 1
  • 在Java中,我們可以通過多種方式來(lái)創(chuàng)建對(duì)象,并且只要對(duì)象沒有被回收我們都可以復(fù)用該對(duì)象。但是,我們創(chuàng)建出來(lái)的這些...
    懶癌正患者閱讀 1,672評(píng)論 0 12
  • .rx的實(shí)現(xiàn)原理關(guān)聯(lián)類型。主要實(shí)現(xiàn)ReactiveCompatible協(xié)議,實(shí)現(xiàn)了這個(gè)協(xié)議的都會(huì)有rx。萬(wàn)物皆rx
    憶痕無(wú)殤閱讀 896評(píng)論 0 1

友情鏈接更多精彩內(nèi)容