这篇文章主要实现的是j:通过socket传递Java对象。采用的方法就是对象序列化。方法是:通过socke
t建立c/s连接;通过ObjectOutputStream,ObjectOutputStream 读写对象。唯一需要留意的是传递的java
对象需要实现Serializable标记接口。
服务端代码:
package com.yt.manager.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Description:服务器端Socket
* @ClassName: Server
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-15
*/
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
ObjectInputStream objInputStream = null;
ObjectOutputStream objOutputStream = null;
try {
serverSocket = new ServerSocket(11111);
System.out.println("Server服务已启动。。。。");
socket = serverSocket.accept();
// 对客户端使用 ObjectOutputStream 写入的对象进行反序列化
objInputStream = new ObjectInputStream(socket.getInputStream());
Customer cusotmer = (Customer) objInputStream.readObject();
cusotmer.setName("你好:" + cusotmer.getName());
objOutputStream = new ObjectOutputStream(socket.getOutputStream());
objOutputStream.writeObject(cusotmer);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
serverSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码:
package com.yt.manager.Serializable;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Description:服务器端Socket
* @ClassName: Server
* @Project: base-info
* @Author: zxf
* @Date: 2011-7-15
*/
public class Server {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
ObjectInputStream objInputStream = null;
ObjectOutputStream objOutputStream = null;
try {
serverSocket = new ServerSocket(11111);
System.out.println("Server服务已启动。。。。");
socket = serverSocket.accept();
// 对客户端使用 ObjectOutputStream 写入的对象进行反序列化
objInputStream = new ObjectInputStream(socket.getInputStream());
Customer cusotmer = (Customer) objInputStream.readObject();
cusotmer.setName("你好:" + cusotmer.getName());
objOutputStream = new ObjectOutputStream(socket.getOutputStream());
objOutputStream.writeObject(cusotmer);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
serverSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package com.yt.manager.Serializable;
import java.io.Serializable;
/**
* @Description:实现序列化接口
* @ClassName: Customer
* @Project: base-info
* @Author: zxf
* @Date: 2011-5-30
*/
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
public String name;
public int 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;
}
}
分享到:
相关推荐
服务器接收并反序列化这个字节流,恢复出Student对象,从而完成了一次基于Socket的序列化对象通信。 总结,Socket通信结合对象序列化提供了一种有效的方式,让网络上的不同系统可以共享和交换自定义的Java对象。这...
在网络中传递对象,可以通过Socket编程实现,将序列化的对象作为数据流在网络中传输。客户端和服务器端分别使用`ObjectOutputStream`和`ObjectInputStream`进行读写。 自定义对象序列化,可以重写`writeObject()`和...
Java序列化是将对象转换为字节流的过程,以便于存储或在网络上传输。要使一个类可序列化,你需要在类定义上实现`Serializable`接口。例如: ```java public class MyObject implements Serializable { // 类的属性...
所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象。这个过程也可以通过...像RMI、Socket、JMS、EJB它们中的一种,彼此为什么能够传递Java对象,当然都是对象序列化机制的功劳。
"java客户端服务器传递对象"这个主题涉及到的核心知识点主要包括Java RMI(Remote Method Invocation,远程方法调用)、对象序列化以及网络通信的基本原理。下面我们将深入探讨这些概念。 1. **Java RMI**: RMI是...
而ObjectOutputStream则是一个序列化流,用于将Java对象转换为字节流,以便通过网络传输。 首先,我们来理解Socket。Socket是Java的java.net包中的类,它主要用于网络编程,创建TCP连接。当你想要在一个应用程序中...
Java序列化是将对象转换为字节流的过程,以便在网络中传输或持久化存储。要使一个类可序列化,需要实现`java.io.Serializable`接口。例如,如果我们有一个名为`MyBean`的JavaBean: ```java public class MyBean ...
总之,Java与C语言通过Socket通信传递结构体数据,需要在两者之间建立共同的数据表示方式,并实现相应的序列化和反序列化策略。这通常涉及到对网络协议、数据编码和解码的深入了解。在实际开发中,选择合适的序列化...
本文将介绍几种常用的Java序列化技术,并通过比较、分析这些技术在功能、序列化后的字节数和序列化、反序列化速度方面的差异,得出了在什么应用环境下应该如何选择序列化技术框架。 对象序列化概述 对象序列化是一...
因此,我们需要使用对象流(Object Stream)来序列化和反序列化对象,以便在网络间传递。 1. **序列化与反序列化**: 在Java中,为了让一个对象能够被序列化,该类必须实现`java.io.Serializable`接口。例如,我们...
4. **发送序列化对象**:通过已建立的TCP连接,将序列化后的字节流写入Socket的输出流。 5. **接收和反序列化**:在另一端,从Socket的输入流读取字节流,然后使用相应的反序列化方法恢复为对象。 6. **关闭连接**...
Java序列化(Serializable)是Java平台提供的一种持久化机制,允许将对象的状态转换为字节流,以便存储到磁盘、数据库中,或者在网络上传输。这一过程被称为对象的序列化。反之,将字节流恢复为原来的对象状态称为反...
2. 序列化对象:使用`ObjectOutputStream`的`writeObject()`方法将对象写入输出流。 3. 反序列化对象:使用`ObjectInputStream`的`readObject()`方法从输入流中读取对象。 在Java中,序列化不仅涉及对象的属性,还...
序列化是将Java对象转化为字节数组的过程,反序列化则是相反的操作。 在实际应用中,为了提高效率和健壮性,还需要考虑错误处理、多线程、网络异常等问题。例如,设置超时时间防止死锁,使用BufferedReader或...
总结,Qt与Java之间的Socket通信涉及了网络编程、JSON序列化和反序列化、多线程处理(特别是在Java中处理并发连接时)、以及错误处理等多个技术点。理解并熟练掌握这些知识点,可以构建可靠的跨平台通信系统。
4. **序列化与反序列化**:在网络通信中,对象需要被转换为可传输的字节流,这个过程就是序列化。Java提供了多种序列化方式,如Java内置的序列化(implements Serializable)、protobuf、JSON等。在RPC框架中,我们...
在Android开发中,数据交换和存储常常涉及到对象的序列化和反序列化。这是一个关键的环节,特别是当数据需要通过网络(如Socket)或者蓝牙进行传输时,因为这些通信方式通常要求以二进制格式传输数据。本篇将详细...
- 创建一个发送类,负责序列化对象并将其放入`DatagramPacket`,然后通过`MulticastSocket`发送。 - 创建一个接收类,持续监听多组播组,接收到数据包后反序列化对象。 6. **安全性与性能**: - 序列化可能带来...