Java Socket通信中序列化与反序列化代码详解

2025-01-01 23:21:25   小编

Java Socket通信中序列化与反序列化代码详解

在Java的Socket通信中,序列化与反序列化起着至关重要的作用。它们使得对象能够在网络中进行传输和接收,实现了数据的有效交互。

我们来了解一下序列化。序列化是将对象转换为字节流的过程,以便在网络上传输或保存到文件中。在Java中,要实现序列化,对象所属的类必须实现java.io.Serializable接口。这个接口是一个标记接口,没有任何方法需要实现,它只是告诉Java虚拟机该类的对象可以被序列化。

下面是一个简单的示例代码,定义一个可序列化的类:

import java.io.Serializable;

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

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

    // 省略getter和setter方法
}

在发送端,我们需要将Person对象序列化并通过Socket发送出去:

import java.io.ObjectOutputStream;
import java.net.Socket;

public class Sender {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("localhost", 8888);
        Person person = new Person("Alice", 25);
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        oos.writeObject(person);
        oos.close();
        socket.close();
    }
}

接下来是反序列化。反序列化是将字节流转换回对象的过程。在接收端,我们从Socket接收字节流并进行反序列化:

import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Receiver {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket socket = serverSocket.accept();
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
        Person person = (Person) ois.readObject();
        System.out.println("Received: " + person.getName() + ", " + person.getAge());
        ois.close();
        socket.close();
        serverSocket.close();
    }
}

通过上述代码,我们实现了在Java Socket通信中的序列化与反序列化,使得对象能够在网络中顺利传输和接收,为分布式应用开发提供了有力支持。

TAGS: 序列化 代码详解 反序列化 Java Socket通信

欢迎使用万千站长工具!

Welcome to www.zzTool.com