客户端发送java对象到服务端
时间: 2023-07-04 16:10:05 浏览: 56
客户端可以将Java对象序列化为字节数组,然后通过网络传输到服务端,服务端在接收到字节数组后,可以将其反序列化为Java对象。下面是一个示例代码:
客户端发送Java对象:
```java
// 创建一个Java对象
Person person = new Person("张三", 20);
// 将Java对象序列化为字节数组
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(person);
byte[] data = bos.toByteArray();
// 发送字节数组到服务端
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
out.write(data);
out.flush();
socket.shutdownOutput();
```
服务端接收Java对象:
```java
// 接收字节数组
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();
InputStream in = socket.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
byte[] data = bos.toByteArray();
// 将字节数组反序列化为Java对象
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
Person person = (Person) ois.readObject();
System.out.println(person.getName() + ", " + person.getAge());
socket.shutdownInput();
socket.close();
serverSocket.close();
```
需要注意的是,Java对象需要实现Serializable接口才能被序列化和反序列化。同时,使用Java序列化方式进行对象传输也有一些局限性,比如不同的JVM、不同的Java版本之间可能存在不兼容问题,因此在实际应用中,可以考虑使用其他序列化框架,比如Protobuf、JSON等。