1.概念上的内容请参考,里面说的很详细了,包括什么时候用serializable,有什么特点等
http://www.2cto.com/kf/201405/305380.html
什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
第一种情况和第二种很类似,这里贴上一个用套接字在网络上传送对象的例子
用套接字在网络上传送对象:
1.首先建立要传输的对象
-
- import java.io.Serializable;
- public class ObjectSeri implements Serializable{
-
-
-
- private String name;
- private String age;
- public String getName() {
- return name;
- }
- public String getAge() {
- return age;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setAge(String age) {
- this.age = age;
- }
-
- }
2.有了传输的对象,下一步就是建立一个服务端线程来监听socket端口,并且在run方法里面实现读取对象的数据
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
-
-
- public class serverTest extends Thread {
-
- private final int serverPort = 3400;
- private ServerSocket server;
- public serverTest() {
- try {
-
- server = new ServerSocket(serverPort);
- System.out.println("正在监听3400端口");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void run() {
- Socket socket = null;
- ObjectInputStream in;
- while (true) {
- try {
- synchronized (server) {
- socket = server.accept();
- }
- System.out.println("当前的连接是:"
- + socket.getInetAddress().toString());
- socket.setSoTimeout(20000);
- in = new ObjectInputStream(socket.getInputStream());
- ObjectSeri data = (ObjectSeri) in.readObject();
- System.out.println("The name is:" + data.getName()
- + "and age is:" + data.getAge());
- in.close();
- in = null;
- socket.close();
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- }
-
- public static void main(String args[]) {
- (new serverTest()).start();
- }
-
- }
3.最后,建立一个客户端来测试下
- import java.io.ObjectOutputStream;
- import java.net.InetSocketAddress;
- import java.net.Socket;
-
-
- public class TestClient {
- private String address = "127.0.0.1";
- private int port = 3400;
-
- public TestClient() {
-
- ObjectSeri data = new ObjectSeri();
- data.setName("Scott");
- data.setAge("34");
- Socket client = new Socket();
- InetSocketAddress adr = new InetSocketAddress(this.address, this.port);
- try {
- client.connect(adr, 10000);
- ObjectOutputStream out = new ObjectOutputStream(
- client.getOutputStream());
-
- out.writeObject(data);
- out.flush();
- out.close();
- out = null;
- data = null;
- client.close();
- client = null;
- } catch (java.io.IOException e) {
-
- System.out.println("IOException :" + e.toString());
- }
- }
-
- public static void main(String[] args) {
- new TestClient();
-
- }
-
- }
输出结果如下:
正在监听3400端口
当前的连接是:/127.0.0.1
The name is:Scottand age is:34
http://blog.csdn.net/kingmicrosoft/article/details/38942843