引用
[*]
引用
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();
}
}
分享到:
相关推荐
5.2.3 序列化的几种方式 在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种: 一是把对象包装成JSON字符串传输, 二是采用Java对象的序列化和反...
绍Java Socket网络传输的序列化机制
Java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个...
JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输
JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输
JAVA使用ByteArrayOutputStream、ByteArrayInputStream将对象序列化反序列化,通过JAVA socket实现对象在网络中传输
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
java简易聊天程序,使用TCP socket套接字安全协议,对象流二进制序列化传输。 简易局域网聊天程序,暂时只能发送文本消息。 此程序既是socket服务器又可以作为socket客户端。由于鄙人写的关闭服务和断开连接还存在...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...
密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存...
空间开销(序列化大小)、时间开销(序列化/反序列化时间) 序列化协议: stream、xml、json、thrift、protobuf 序列化实现: java-built-in、hessian、fastjson、jackson、gson、Thrift、ProtoBuf NIO IO: 单向、阻塞、流...
实例88 序列化和反序列化 226 实例89 Zip格式压缩、解压缩文件 228 实例90 从Jar中读取文本 232 实例91 流标记分割和统计字符串 234 实例92 Java操作Excel文件 237 第11章 Java高级特性 245 实例93 自动装箱与...
JOptionPane.showMessageDialog(null, "对象未序列化!"); } catch (IOException e4) { JOptionPane.showMessageDialog(null, "不能写入到指定服务器!"); } } public static void main(String arg[]){ ...