最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)實(shí)例了解java序列化機(jī)制

 更新時(shí)間:2019年11月20日 09:30:17   作者:zsben  
這篇文章主要介紹了通過(guò)實(shí)例了解java序列化機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了通過(guò)實(shí)例了解java序列化機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

序列化是指對(duì)象通過(guò)寫(xiě)出描述自己狀態(tài)的數(shù)值來(lái)記錄自己的過(guò)程,即將對(duì)象表示成一系列有序字節(jié),Java提供了將對(duì)象寫(xiě)入流和從流中恢復(fù)對(duì)象的方法。對(duì)象能包含其它的對(duì)象,而其它的對(duì)象又可以包含另外的對(duì)象。Java序列化能夠自動(dòng)的處理嵌套的對(duì)象。對(duì)于一個(gè)對(duì)象的簡(jiǎn)單域,writeObject()直接將其值寫(xiě)入流中。

當(dāng)遇到一個(gè)對(duì)象域時(shí),writeObject()被再次調(diào)用,如果這個(gè)對(duì)象內(nèi)嵌另一個(gè)對(duì)象,那么,writeObject()又被調(diào)用,直到對(duì)象能被直接寫(xiě)入流為止。程序員所需要做的是將對(duì)象傳入ObjectOutputStream的writeObject()方法,剩下的將有系統(tǒng)自動(dòng)完成。

要實(shí)現(xiàn)序列化的類必須實(shí)現(xiàn)的java.io.Serializable或java.io.Externalizable接口,否則將產(chǎn)生一個(gè)NotSerializableException。該接口內(nèi)部并沒(méi)有任何方法,它只是一個(gè)"tagging interface",僅僅"tags"它自己的對(duì)象是一個(gè)特殊的類型。

類通過(guò)實(shí)現(xiàn) java.io.Serializable接口以啟用其序列化功能。未實(shí)現(xiàn)此接口的類將無(wú)法使其任何狀態(tài)序列化或反序列化??尚蛄谢惖乃凶宇愋捅旧矶际强尚蛄谢?。

序列化接口沒(méi)有方法或字段,僅用于標(biāo)識(shí)可序列化的語(yǔ)義。Java的"對(duì)象序列化"能讓你將一個(gè)實(shí)現(xiàn)了Serializable接口的對(duì)象轉(zhuǎn)換成一組byte,這樣日后要用這個(gè)對(duì)象時(shí)候,你就能把這些byte數(shù)據(jù)恢復(fù)出來(lái),并據(jù)此重新構(gòu)建那個(gè)對(duì)象了。

代碼如下

package stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import javax.security.auth.login.AccountException;

import org.junit.jupiter.api.Test;

/*
 * 對(duì)象流
 *   用與存儲(chǔ)和讀取基本數(shù)據(jù)類型數(shù)據(jù) 或 對(duì)象的處理劉。它的強(qiáng)大之處就是可以把java中的對(duì)象轉(zhuǎn)換成流
 * 
 * */

public class ObjectInputStreamTeat {
  /*
   * 序列化過(guò)程:將內(nèi)存中的java對(duì)象保存到磁盤或通過(guò)網(wǎng)絡(luò)傳輸出去
   * 使用ObjectOutputStream 
   * */
  @Test
  public void testObjectOutputStream() {
    ObjectOutputStream oos = null;
    try {
      oos = new ObjectOutputStream(new FileOutputStream("Object.dat"));
      oos.writeObject(new String("我是中國(guó)人"));
      oos.flush();
      
      oos.writeObject(new Person("zsben",1,new Account(2000)));
      oos.flush();
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    finally {
      try {
        if(oos!=null)
          oos.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
  
  /*
   * 反序列化:用ObjectInputStream實(shí)現(xiàn)
   * */
  @Test
  public void testObjectInputStream() {
    ObjectInputStream ois = null;
    try {
      ois = new ObjectInputStream(new FileInputStream("Object.dat"));
      Object object = ois.readObject();
      String string = (String)object;
      System.out.println(string);
      
      Object object2 = ois.readObject();
      Person person = (Person)object2;
      System.out.println(person);
      
    } catch (Exception e) {
      e.printStackTrace();
    }
    finally {
      try {
        if(ois!=null)
          ois.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}
/*
 * 1.Person類要實(shí)現(xiàn)可序列化,必須實(shí)現(xiàn)可序列化接口Serializable
 * 2.還需要添加一個(gè)最終類屬性UID
 * 3.除了當(dāng)前Person類需要實(shí)現(xiàn)Serializable,還要保證其內(nèi)部所有屬性都是可序列化的
 *   (默認(rèn)情況下基本數(shù)據(jù)類型為可序列化)
 * 對(duì)象流不能序列化static 和transient修飾的成員
 * */
class Person implements Serializable{
  public static final long serivalVersionUID = 5432146546351568416L;
  
  private String name;
  private static int age;
  private Account account; 
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + ", account=" + account + "]";
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  
  public Person(String name, int age, Account account) {
    super();
    this.name = name;
    this.age = age;
    this.account = account;
  }
  public Person() {
    super();
  }  
}
class Account implements Serializable{
  private double balance;
  static final public long serivalVersionUID = 54685237864535874L;
  @Override
  public String toString() {
    return "Account [balance=" + balance + "]";
  }

  public double getBalance() {
    return balance;
  }

  public void setBalance(double balance) {
    this.balance = balance;
  }

  public Account(double balance) {
    super();
    this.balance = balance;
  }

  public Account() {
    super();
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)

    Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)

    為了解決 本地調(diào)試 的問(wèn)題,本文實(shí)現(xiàn)了一種簡(jiǎn)單實(shí)用的策略,可以通過(guò) Nacos 動(dòng)態(tài)配置服務(wù)路由,還可以基于用戶,部門,組織等級(jí)別配置服務(wù)路由,實(shí)現(xiàn) 本地調(diào)試 的同時(shí),實(shí)際上也實(shí)現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • SpringBoot中的yaml語(yǔ)法及靜態(tài)資源訪問(wèn)問(wèn)題

    SpringBoot中的yaml語(yǔ)法及靜態(tài)資源訪問(wèn)問(wèn)題

    這篇文章主要介紹了SpringBoot中的yaml語(yǔ)法及靜態(tài)資源訪問(wèn)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • JUC之CountdownLatch使用詳解

    JUC之CountdownLatch使用詳解

    這篇文章主要介紹了JUC之CountdownLatch使用詳解,CountdownLatch 用來(lái)進(jìn)行線程同步協(xié)作,等待所有線程完成倒計(jì)時(shí),
    其中構(gòu)造參數(shù)用來(lái)初始化等待計(jì)數(shù)值,await() 用來(lái)等待計(jì)數(shù)歸零,countDown() 用來(lái)讓計(jì)數(shù)減一,需要的朋友可以參考下
    2023-12-12
  • Java IText異常NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable的解決方法

    Java IText異常NoClassDefFoundError: org/bouncycastle

    在使用Java進(jìn)行PDF文檔操作時(shí),iText是一個(gè)非常強(qiáng)大的庫(kù),然而,在實(shí)際開(kāi)發(fā)過(guò)程中,可能會(huì)遇到一些異常情況,其中之一就是??NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable??,本文將探討這個(gè)錯(cuò)誤的原因及其解決方案,需要的朋友可以參考下
    2025-02-02
  • SpringBoot項(xiàng)目使用validated實(shí)現(xiàn)參數(shù)校驗(yàn)框架

    SpringBoot項(xiàng)目使用validated實(shí)現(xiàn)參數(shù)校驗(yàn)框架

    當(dāng)談到Spring的參數(shù)校驗(yàn)功能時(shí),@Validated注解無(wú)疑是一個(gè)重要的利器,它為我們提供了一種簡(jiǎn)單而又強(qiáng)大的方式來(lái)驗(yàn)證請(qǐng)求參數(shù)的合法性,保證了系統(tǒng)的穩(wěn)定性和安全性,本文將介紹Spring Validated的基本用法以及在實(shí)際項(xiàng)目中的應(yīng)用,需要的朋友可以參考下
    2024-05-05
  • 使用IDEA將Java/Kotliin工程導(dǎo)出Jar包的正確姿勢(shì)

    使用IDEA將Java/Kotliin工程導(dǎo)出Jar包的正確姿勢(shì)

    這篇文章主要介紹了使用IDEA將Java/Kotliin工程導(dǎo)出Jar包的正確姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java的分支結(jié)構(gòu)與循環(huán)你知道多少

    Java的分支結(jié)構(gòu)與循環(huán)你知道多少

    這篇文章主要為大家詳細(xì)介紹了Java的分支結(jié)構(gòu)與循環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    springboot中不能獲取post請(qǐng)求參數(shù)的解決方法

    這篇文章主要介紹了springboot中不能獲取post請(qǐng)求參數(shù)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

    聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題

    這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot登錄攔截配置詳解(實(shí)測(cè)可用)

    SpringBoot登錄攔截配置詳解(實(shí)測(cè)可用)

    這篇文章主要介紹了SpringBoot登錄攔截配置詳解(實(shí)測(cè)可用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

洛川县| 乐至县| 青冈县| 汤原县| 清流县| 赤城县| 绥德县| 乃东县| 方正县| 潢川县| 边坝县| 庄河市| 连江县| 乐至县| 循化| 湘潭市| 崇文区| 巩义市| 双桥区| 白朗县| 都安| 尚义县| 奈曼旗| 昆山市| 安达市| 江阴市| 鄂托克旗| 禹州市| 铜鼓县| 涟源市| 百色市| 兴业县| 邹平县| 平顶山市| 黄冈市| 安阳县| 友谊县| 托克逊县| 曲水县| 九龙县| 江都市|