java通过socket传输对象流序列化与反序列化
时间: 2023-06-13 18:03:02 浏览: 140
Java中可以通过Socket传输对象流,其中涉及到对象的序列化和反序列化。下面是示例代码:
服务端:
```java
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
Socket socket = serverSocket.accept();
System.out.println("客户端已连接");
// 获取输入流
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
// 读取对象
Object obj = ois.readObject();
// 将对象转换为Person类型
Person person = (Person) obj;
System.out.println("接收到客户端发送的对象:" + person);
// 关闭流和Socket
ois.close();
socket.close();
serverSocket.close();
}
}
```
客户端:
```java
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8888);
// 创建输出流
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
// 创建Person对象并写入输出流
Person person = new Person("张三", 18);
oos.writeObject(person);
// 关闭流和Socket
oos.close();
socket.close();
}
}
```
其中Person类需要实现Serializable接口,示例代码如下:
```java
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 void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
```
在上面的代码中,服务端和客户端通过Socket建立连接后,服务端通过输入流读取对象,并将对象转换为Person类型,最后输出接收到的对象。客户端创建输出流,将Person对象写入输出流,传输给服务端。注意,在传输对象时,需要将对象转换为字节流,即序列化,以便于网络传输;而在接收对象时,需要将接收到的字节流转换为对象,即反序列化。
阅读全文