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

Java文件操作之序列化與對(duì)象處理流詳解

 更新時(shí)間:2022年09月15日 10:00:04   作者:興趣使然黃小黃  
這篇文章主要為大家詳細(xì)介紹了Java文件操作中的序列化與對(duì)象處理流,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.序列化與反序列化

序列化就是在保存數(shù)據(jù)時(shí),保存數(shù)據(jù)的值和數(shù)據(jù)類型;

反序列化就是在恢復(fù)數(shù)據(jù)時(shí),恢復(fù)數(shù)據(jù)的值和數(shù)據(jù)類型;

需要讓某個(gè)對(duì)象支持序列化機(jī)制,則必須讓其類是可序列化的;

為了讓某個(gè)類是可序列化的,該類必須實(shí)現(xiàn) Serilizable與 Externalizable 兩個(gè)接口之一。

為什么需要對(duì)象處理流?

答:假設(shè)我們存儲(chǔ)了 int num = 20這個(gè)數(shù)據(jù)到文件中,而這個(gè)20是一個(gè)數(shù)字,我們需要從文件中將數(shù)據(jù)恢復(fù)。

可是,文件中僅僅存儲(chǔ)了 20 這一個(gè)數(shù)字,我們沒有辦法判斷,存儲(chǔ)它的時(shí)候是將它存儲(chǔ)為了 int 類型還是 String 類型。

而對(duì)象處理流,就是幫助我們解決類似問題的,即:能夠?qū)?基本數(shù)據(jù)類型 或者 對(duì)象 進(jìn)行序列化和反序列化操作!

2.對(duì)象處理流

2.1 概述

ObjectOutputStream 提供 序列化功能;

ObjectInputStream 提供 反序列化功能。

提供了對(duì)基本類型或者對(duì)象類型的序列化和反序列化方法。

類的繼承關(guān)系圖如下:

2.2 ObjectOutputStream案例

使用ObjectOutputStream序列化基本數(shù)據(jù)類型和一個(gè)Student對(duì)象(name,age),保存到data.dat文件中。

參考代碼與結(jié)果:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * @author 興趣使然黃小黃
 * @version 1.0
 * 序列化基本數(shù)據(jù)類型和對(duì)象類型演示
 */
public class ObjectOutputStreamTest {
    public static void main(String[] args) {
        //創(chuàng)建流對(duì)象
        ObjectOutputStream objectOutputStream = null;
        try {
            objectOutputStream = new ObjectOutputStream(new FileOutputStream(
                    "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\data.dat"));
            //序列化后,保存的文件格式,不是純文本,而是按照它自己的格式存儲(chǔ)的
            //序列化數(shù)據(jù)
            //int -> Integer(實(shí)現(xiàn)了 Serializable)
            objectOutputStream.writeInt(100);
            //boolean -> Boolean(實(shí)現(xiàn)了 Serializable)
            objectOutputStream.writeBoolean(true);
            //char -> Character
            objectOutputStream.writeChar('a');
            //String
            objectOutputStream.writeUTF("黃小黃");
            //保存一個(gè)Student對(duì)象
            objectOutputStream.writeObject(new Student("黃小黃", 21));

            System.out.println("數(shù)據(jù)序列化成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //釋放資源
            if(objectOutputStream != null) {
                try {
                    objectOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

class Student implements Serializable{
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

說(shuō)明:

序列化基本數(shù)據(jù)類型的時(shí)候,會(huì)進(jìn)行自動(dòng)裝箱。比如存儲(chǔ)int類型的100,則會(huì)以Integer的形式自動(dòng)裝箱后存儲(chǔ),因?yàn)镮nteger實(shí)現(xiàn)了Serializable接口。

2.3 ObjectInputStream案例

使用ObjectInputStream讀取data.dat的數(shù)據(jù),并反序列化恢復(fù)數(shù)據(jù)。

參考代碼與結(jié)果:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * @author 興趣使然黃小黃
 * @version 1.0
 */
public class ObjectInputStreamTest {
    public static void main(String[] args) {
        //創(chuàng)建流對(duì)象
        ObjectInputStream objectInputStream = null;
        try {
            objectInputStream = new ObjectInputStream(new FileInputStream(
                    "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\data.dat"));
            //讀取數(shù)據(jù)
            System.out.println(objectInputStream.readInt());
            System.out.println(objectInputStream.readBoolean());
            System.out.println(objectInputStream.readChar());
            System.out.println(objectInputStream.readUTF());
            System.out.println(objectInputStream.readObject());
            //程序結(jié)束
            System.out.println("反序列化完成!");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            //釋放資源
            if (objectInputStream != null){
                try {
                    objectInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
 }

說(shuō)明:

反序列化的順序一定要與序列化的順序一樣,否則,程序會(huì)拋出異常。

2.4 對(duì)象處理流的使用細(xì)節(jié)

1.讀寫順序一致,即序列化與反序列化的順序應(yīng)該一致;

2.要求實(shí)現(xiàn)序列化或者反序列化對(duì)象,需要實(shí)現(xiàn)Serializable接口;

3.序列化類中建議添加SerialVersionUID,為了提高版本兼容性;

4.序列化對(duì)象時(shí),默認(rèn)將里面所有的屬性都進(jìn)行序列化,但static與transient修飾的成員除外;

5.序列化對(duì)象時(shí),要求里面的屬性的類型也要實(shí)現(xiàn)序列化接口;

6.序列化具備可繼承性,也就是如果某類已經(jīng)實(shí)現(xiàn)了序列化,則它的所有子類也已經(jīng)默認(rèn)實(shí)現(xiàn)了序列化。

到此這篇關(guān)于Java文件操作之序列化與對(duì)象處理流詳解的文章就介紹到這了,更多相關(guān)Java序列化 對(duì)象處理流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例

    java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口代碼示例

    這篇文章主要介紹了java發(fā)送post請(qǐng)求使用multipart/form-data格式文件數(shù)據(jù)到接口的相關(guān)資料,文中指定了數(shù)據(jù)編碼格式為UTF-8,并強(qiáng)調(diào)了所需依賴工具類,需要的朋友可以參考下
    2024-12-12
  • Java集合TreeSet用法詳解

    Java集合TreeSet用法詳解

    本文詳細(xì)講解了Java集合TreeSet用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址

    Java實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址

    這篇文章主要介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)獲取內(nèi)網(wǎng)的所有IP地址,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的參考價(jià)值,快跟隨小編一起學(xué)習(xí)一下吧
    2022-06-06
  • Idea自動(dòng)生成Entity實(shí)現(xiàn)過程詳解

    Idea自動(dòng)生成Entity實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Idea自動(dòng)生成Entity實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 解決springboot responseentity<string>亂碼問題

    解決springboot responseentity<string>亂碼問題

    這篇文章主要介紹了解決springboot responseentity<string>亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot整合RabbitMQ發(fā)送短信的實(shí)現(xiàn)

    springboot整合RabbitMQ發(fā)送短信的實(shí)現(xiàn)

    本文會(huì)和SpringBoot做整合,實(shí)現(xiàn)RabbitMQ發(fā)送短信,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • .properties文件讀取及占位符${...}替換源碼解析

    .properties文件讀取及占位符${...}替換源碼解析

    本篇文章主要介紹了.properties文件讀取及占位符${...}替換源碼解析的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • 淺談Java中的分布式鎖

    淺談Java中的分布式鎖

    這篇文章主要介紹了淺談Java中的分布式鎖,為了保證一個(gè)方法或?qū)傩栽诟卟l(fā)情況下的同一時(shí)間只能被同一個(gè)線程執(zhí)行,在傳統(tǒng)單體應(yīng)用單機(jī)部署的情況下,可以使用Java并發(fā)處理相關(guān)的API(如ReentrantLock或Synchronized)進(jìn)行互斥控制,需要的朋友可以參考下
    2023-09-09
  • 微信java開發(fā)之實(shí)現(xiàn)微信主動(dòng)推送消息

    微信java開發(fā)之實(shí)現(xiàn)微信主動(dòng)推送消息

    這篇文章主要介紹了微信開發(fā)過程中的使用java實(shí)現(xiàn)微信主動(dòng)推送消息示例,需要的朋友可以參考下
    2014-03-03
  • Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲

    Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了Java+JFrame實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評(píng)論

八宿县| 库车县| 年辖:市辖区| 聊城市| 溆浦县| 梓潼县| 石河子市| 富阳市| 许昌市| 芜湖市| 勃利县| 芦溪县| 乐平市| 乌兰察布市| 蛟河市| 高碑店市| 石家庄市| 贵南县| 永德县| 庐江县| 丹江口市| 余江县| 高碑店市| 满城县| 新蔡县| 巴林右旗| 苗栗县| 平武县| 盐山县| 曲水县| 南澳县| 芮城县| 永州市| 洛浦县| 界首市| 金昌市| 沙河市| 南平市| 九寨沟县| 论坛| 宜丰县|