`
生活的聆听者
  • 浏览: 16702 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于将序列化的JAVA类对象在Socket传输

阅读更多
引用

[*]
引用
JAVA中的对象序列化是用来讲java的类对象实例编码成字节流在传输层进行传输【这个过程可以被称作序列化】,并且在服务端接收到序列化之后的对象进行反序列化从字节流编码中重新构建对象【这个过程可以被称为反序列化】。可以这么说JAVA序列化技术为java远程通信提供了标准的线路级对象表示法,也为JAVABEANS组件结构提供了标准的持久化数据格式,【这句话引自effective java】。
[*]
[*]下面的代码例子很简单,就是一个简单的序列化与反序列化的过程。主要是将一个JAVA类对象序列化后传输到服务端,在服务端进行反序列化重构类对象。
持久化类:Persistence.java
package com.test.serializable;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class Persistence implements Serializable {
	
	private Person person ;
	
	public Persistence(){
		person = new Person();
		person.setNameString("Jack");
	    person.setSex("M");
	    person.setBirthday("2013");
	    person.setStreet("shangdi");
	    person.setAddress("beijing");
	}
	
	public byte[] toBytes() {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		try {
			ObjectOutputStream obout = new ObjectOutputStream(out);
			obout.writeObject(person);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return out.toByteArray();
	}

	public Person readBytes(byte[] bs) {
		Person person = null;
		try {
			ByteArrayInputStream byteIn = new ByteArrayInputStream(bs);
			ObjectInputStream in = new ObjectInputStream(byteIn);
			person = (Person) in.readObject();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return person;
	}

	public class Person implements Serializable {
		String nameString;
		String sex;
		String birthday;
		String address;
		String street;

		public String getNameString() {
			return nameString;
		}

		public void setNameString(String nameString) {
			this.nameString = nameString;
		}

		public String getSex() {
			return sex;
		}

		public void setSex(String sex) {
			this.sex = sex;
		}

		public String getBirthday() {
			return birthday;
		}

		public void setBirthday(String birthday) {
			this.birthday = birthday;
		}

		public String getAddress() {
			return address;
		}

		public void setAddress(String address) {
			this.address = address;
		}

		public String getStreet() {
			return street;
		}

		public void setStreet(String street) {
			this.street = street;
		}

	}
}



客户端类:Client.java
package com.test.serializable;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	private String ipAddress = "127.0.0.1";
	private int port = 9000;
	private Persistence persistence ;
	Socket socket;
	

	public Client() {
		persistence = new Persistence();
		try {
			socket = new Socket(ipAddress, port);
		} catch (UnknownHostException e) {			
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void outToServer() throws IOException {
		System.out.println("-----Client Begin Send Data-----");
		OutputStream outputStream = socket.getOutputStream();
		byte b[] = new byte[2048];
		b = persistence.toBytes();
		outputStream.write(b);
		outputStream.close();
	}
	public static void main(String args[]) throws IOException{
		Client client = new Client();
		client.outToServer();
	}
}


服务端类:Server.java

package com.test.serializable;

import java.io.BufferedReader;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

import com.bes.serializable.Persistence.Person;

public class Server {

	ServerSocket serverSocket;
	BufferedReader bufferedReader = null;
	Socket socket;

	public Server(){
		try {
			serverSocket = new ServerSocket(9000);
			System.out.println("Waiting For Accept Client ");
			socket = serverSocket.accept();
			System.out.println("Accepted Client ");
}
catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void readFromClient(){
		try {
			System.out.println("------Begin Received From Client------");
			Persistence persistence = new Persistence();
			InputStream inputStream = socket.getInputStream();
			byte b [] = new byte[2048];
			inputStream.read(b);
		   Person object =	persistence.readBytes(b);
		   
			System.out.println("Read From Client Data is :" + object.getAddress());
			System.out.println("Read From Client Data is :" + object.getBirthday());
			System.out.println("Read From Client Data is :" + object.getNameString());
			System.out.println("Read From Client Data is :" + object.getStreet());
			System.out.println("Read From Client Data is :" + object.getSex());
			inputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String args[]){
		Server s = new Server();
		s.readFromClient();
	}
}

分享到:
评论

相关推荐

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    5.2.3 序列化的几种方式 在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种: 一是把对象包装成JSON字符串传输, 二是采用Java对象的序列化和反...

    Java Socket网络传输的序列化机制

    绍Java Socket网络传输的序列化机制

    Java序列化与反序列化三种格式存取

     Java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个...

    TcpServer.java

    JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输

    Message.java

    JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输

    TcpClient.java

    JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java简易聊天程序

    java简易聊天程序,使用TCP socket套接字安全协议,对象流二进制序列化传输。 简易局域网聊天程序,暂时只能发送文本消息。 此程序既是socket服务器又可以作为socket客户端。由于鄙人写的关闭服务和断开连接还存在...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java jdk实列宝典 光盘源代码

    序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...

    基于javatcpsocket通信的拆包和装包源码-chaugod:乔戈德

    空间开销(序列化大小)、时间开销(序列化/反序列化时间) 序列化协议: stream、xml、json、thrift、protobuf 序列化实现: java-built-in、hessian、fastjson、jackson、gson、Thrift、ProtoBuf NIO IO: 单向、阻塞、流...

    JAVA 范例大全 光盘 资源

    实例88 序列化和反序列化 226 实例89 Zip格式压缩、解压缩文件 228 实例90 从Jar中读取文本 232 实例91 流标记分割和统计字符串 234 实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与...

    聊天室java可以实现传送文件功能

    JOptionPane.showMessageDialog(null, "对象未序列化!"); } catch (IOException e4) { JOptionPane.showMessageDialog(null, "不能写入到指定服务器!"); } } public static void main(String arg[]){ ...

Global site tag (gtag.js) - Google Analytics