Java输入输出:解释一下序列化和反序列化。

简介: Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,我们可以使用java.io包中的ObjectOutputStream类将对象序列化为字节流,然后通过ObjectInputStream类将字节流反序列化为对象。

反序列化是将字节流转换回对象的过程。在Java中,我们可以使用java.io包中的ObjectInputStream类将字节流反序列化为对象。

以下是一个简单的示例:

import java.io.*;

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

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

    @Override
    public String toString() {
   
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class SerializeDemo {
   
    public static void main(String[] args) {
   
        Person person = new Person("张三", 30);

        // 序列化
        try (FileOutputStream fos = new FileOutputStream("person.ser");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {
   
            oos.writeObject(person);
            System.out.println("序列化成功");
        } catch (IOException e) {
   
            e.printStackTrace();
        }

        // 反序列化
        try (FileInputStream fis = new FileInputStream("person.ser");
             ObjectInputStream ois = new ObjectInputStream(fis)) {
   
            Person deserializedPerson = (Person) ois.readObject();
            System.out.println("反序列化成功");
            System.out.println(deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
   
            e.printStackTrace();
        }
    }
}

在这个示例中,我们创建了一个实现Serializable接口的Person类。然后,我们使用ObjectOutputStream将Person对象序列化到文件"person.ser"中,接着使用ObjectInputStream从文件中反序列化Person对象。

相关文章
|
3天前
|
存储 安全 Java
Java一分钟之-Java序列化与反序列化
【5月更文挑战第14天】Java序列化用于将对象转换为字节流,便于存储和网络传输。实现`Serializable`接口使类可被序列化,但可能引发隐私泄露、版本兼容性和性能问题。要避免这些问题,可使用`transient`关键字、控制`serialVersionUID`及考虑使用安全的序列化库。示例代码展示了如何序列化和反序列化对象,强调了循环引用和未实现`Serializable`的错误。理解并妥善处理这些要点对优化代码至关重要。
14 1
|
3天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
28 0
|
3天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
22 2
|
3天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
3天前
|
存储 Java
Java的`java.io`包包含多种输入输出类
【5月更文挑战第2天】Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
40 1
|
3天前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化
|
3天前
|
存储 Java 测试技术
滚雪球学Java(22):序列化和反序列化
【4月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
33 1
滚雪球学Java(22):序列化和反序列化
|
3天前
|
SQL 存储 安全
每日一道面试题:Java中序列化与反序列化
每日一道面试题:Java中序列化与反序列化
13 0
|
3天前
|
存储 Java 数据库
|
8月前
|
存储 Java 数据库连接
Java序列化和反序列化
Java序列化和反序列化
67 0

热门文章

最新文章