文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

打包 Java 对象:你需要知道的学习笔记

2023-10-03 23:27

关注

在 Java 编程中,我们经常需要将一些对象打包成一个整体,以便于传输或存储。这时候,就需要使用 Java 对象打包技术。本文将介绍 Java 对象打包的基本概念、使用方法以及一些实用技巧,并提供相关的示例代码,帮助读者更好地理解和掌握这一技术。

一、什么是 Java 对象打包

Java 对象打包是指将一个或多个 Java 对象封装成一个整体,以便于传输或存储。在 Java 中,我们通常使用序列化技术实现对象的打包。序列化是将对象转换为字节序列的过程,可以将对象保存到文件中、通过网络传输等。

二、Java 对象打包的基本使用方法

  1. 实现 Serializable 接口

要想将一个 Java 对象序列化,必须要先实现 Serializable 接口,该接口没有任何方法,只是一个标志性接口,用于标识该类可以被序列化。

示例代码:

import java.io.Serializable;

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}
  1. 序列化对象

在实现 Serializable 接口后,我们可以使用 ObjectOutputStream 类将对象序列化为字节流。

示例代码:

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

public class SerializeDemo {
    public static void main(String[] args) {
        try {
            Person person = new Person("Tom", 20);
            FileOutputStream fos = new FileOutputStream("person.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(person);
            oos.close();
            fos.close();
            System.out.println("Serialized data is saved in person.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 反序列化对象

使用 ObjectInputStream 类可以将序列化的字节流反序列化为对象。

示例代码:

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;

public class DeserializeDemo {
    public static void main(String[] args) {
        try {
            FileInputStream fis = new FileInputStream("person.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Person person = (Person) ois.readObject();
            ois.close();
            fis.close();
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、实用技巧

  1. 序列化多个对象

我们可以使用 ObjectOutputStream 的 writeObject() 方法一次性序列化多个对象。

示例代码:

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

public class SerializeDemo {
    public static void main(String[] args) {
        try {
            Person person1 = new Person("Tom", 20);
            Person person2 = new Person("Jerry", 22);
            FileOutputStream fos = new FileOutputStream("persons.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(person1);
            oos.writeObject(person2);
            oos.close();
            fos.close();
            System.out.println("Serialized data is saved in persons.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 序列化数组

我们也可以将 Java 数组序列化,使用方法与序列化单个对象类似。

示例代码:

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

public class SerializeDemo {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3, 4, 5};
            FileOutputStream fos = new FileOutputStream("numbers.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(numbers);
            oos.close();
            fos.close();
            System.out.println("Serialized data is saved in numbers.ser");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 自定义序列化

如果需要对序列化进行更多的控制,可以自定义序列化过程。Java 提供了 readObject() 和 writeObject() 方法,可以在序列化和反序列化过程中进行相应的处理。

示例代码:

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

public class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    private void writeObject(ObjectOutputStream oos) throws Exception {
        oos.defaultWriteObject();
        oos.writeInt(age);
    }
    private void readObject(ObjectInputStream ois) throws Exception {
        ois.defaultReadObject();
        age = ois.readInt();
    }
}

四、总结

Java 对象打包技术是 Java 编程中非常重要的一部分。通过本文的介绍,读者可以了解到 Java 对象打包的基本概念和使用方法,并掌握了一些实用技巧。在实际编程中,读者可以根据具体需求进行灵活应用,提高开发效率。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯