欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.序列化與反序列化

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

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

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

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

為什么需要對象處理流?

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

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

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

2.對象處理流

2.1 概述

ObjectOutputStream 提供 序列化功能;

ObjectInputStream 提供 反序列化功能。

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

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

2.2 ObjectOutputStream案例

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

說明:

序列化基本數(shù)據(jù)類型的時候,會進(jìn)行自動裝箱。比如存儲int類型的100,則會以Integer的形式自動裝箱后存儲,因為Integer實現(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)建流對象
        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();
                }
            }
        }
    }
 }

說明:

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • mybatis使用xml進(jìn)行增刪改查代碼解析

    mybatis使用xml進(jìn)行增刪改查代碼解析

    這篇文章主要介紹了mybatis使用xml進(jìn)行增刪改查代碼解析,分享了相關(guān)配置和代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Mysql存儲java對象實例詳解

    Mysql存儲java對象實例詳解

    這篇文章主要介紹了Mysql存儲java對象實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    這篇文章主要為大家介紹了java快速排序和選擇排序?qū)崿F(xiàn)實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray

    使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray

    這篇文章主要介紹了使用Gson將字符串轉(zhuǎn)換成JsonObject和JsonArray,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java泛型類與泛型方法的定義詳解

    Java泛型類與泛型方法的定義詳解

    這篇文章主要介紹了Java泛型類與泛型方法的定義,結(jié)合實例形式詳細(xì)分析了java泛型類與泛型方法定義、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)之List的使用總結(jié)

    Java數(shù)據(jù)結(jié)構(gòu)之List的使用總結(jié)

    List是Java中比較常用的集合類,指一系列存儲數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲問題,本文就來拿實際案例總結(jié)介紹一下List的使用方法,感興趣的朋友快來看看吧
    2021-11-11
  • Java代碼審計之URL重定向的問題解決

    Java代碼審計之URL重定向的問題解決

    URLRedirect url重定向漏洞也稱url任意跳轉(zhuǎn)漏洞,網(wǎng)站信任了用戶的輸入導(dǎo)致惡意攻擊,本文主要介紹了Java代碼審計之URL重定向的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • SpringMVC HttpMessageConverter報文信息轉(zhuǎn)換器

    SpringMVC HttpMessageConverter報文信息轉(zhuǎn)換器

    ??HttpMessageConverter???,報文信息轉(zhuǎn)換器,將請求報文轉(zhuǎn)換為Java對象,或?qū)ava對象轉(zhuǎn)換為響應(yīng)報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??
    2023-01-01
  • 如何徹底刪除SVN中的文件和文件夾(附恢復(fù)方法)

    如何徹底刪除SVN中的文件和文件夾(附恢復(fù)方法)

    在SVN中如果刪除某個文件或文件夾也可以在歷史記錄中進(jìn)行找回,有的時候需要徹底刪除某些文件,即不希望通過歷史記錄進(jìn)行恢復(fù),需要在服務(wù)器上對SVN的數(shù)據(jù)進(jìn)行重新整理
    2014-08-08
  • Spring mvc服務(wù)端數(shù)據(jù)校驗實現(xiàn)流程詳解

    Spring mvc服務(wù)端數(shù)據(jù)校驗實現(xiàn)流程詳解

    這篇文章主要介紹了Spring mvc服務(wù)端數(shù)據(jù)校驗實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09

最新評論