public interface ISerializer {

    <T> byte[] serializer(T obj);

    <T> T deSerializer(byte[] data,Class<T> clazz);
}

  

//java实现
public class JavaSerializer implements ISerializer { @Override
public <T> byte[] serializer(T obj) {
ObjectOutputStream objectOutputStream=null;
try {
objectOutputStream=new ObjectOutputStream(new FileOutputStream(new File("user")));
objectOutputStream.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(objectOutputStream!=null){
try {
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
} @Override
public <T> T deSerializer(byte[] data, Class<T> clazz) {
ObjectInputStream objectInputStream=null;
try {
objectInputStream=new ObjectInputStream(new FileInputStream(new File("user")));
return (T)objectInputStream.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if(objectInputStream!=null){
try {
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}

  fast

public class FastjsonSerializer implements ISerializer{

    @Override
public <T> byte[] serializer(T obj) {
return JSON.toJSONString(obj).getBytes();
} @Override
public <T> T deSerializer(byte[] data, Class<T> clazz) {
return JSON.parseObject(new String(data),clazz);
}
}

XML

public class XmlSerializer implements ISerializer{

    XStream xStream=new XStream(new DomDriver());

    @Override
public <T> byte[] serializer(T obj) {
return xStream.toXML(obj).getBytes();
} @Override
public <T> T deSerializer(byte[] data, Class<T> clazz) {
return (T)xStream.fromXML(new String (data));
}
}

protobuf实现较为麻烦,需要先生成对应的类。(可以百度如何使用protobuf进行序列化)

demo:

public class SuperClass implements Serializable {

    String sex;

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

  

public class User extends SuperClass  {

    public static int num=;

    private String name;
private int age; private transient String hobby; //序列化对象
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeObject(hobby);
} //反序列化
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
hobby=(String)objectInputStream.readObject();
} 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;
} public String getHobby() {
return hobby;
} public void setHobby(String hobby) {
this.hobby = hobby;
} @Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", hobby='" + hobby + '\'' +
'}';
}
}
public class App
{
public static void main( String[] args ) {
ISerializer iSerializer=new FastjsonSerializer();
User user=new User();
user.setAge();
user.setName("Mic");
user.setHobby("菲菲");
user.setSex("男"); byte[] rs=iSerializer.serializer(user); System.out.println(new String(rs)); User user1=iSerializer.deSerializer(rs,User.class);
System.out.println(user1+"->"+user1.getSex()); }
}
public class Email implements Serializable {

    private String content;

    public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
}
}
public class Person implements Cloneable,Serializable {

    private String name;

    private Email email;

    public Person(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Email getEmail() {
return email;
} public void setEmail(Email email) {
this.email = email;
} @Override
protected Person clone() throws CloneNotSupportedException {
return (Person)super.clone();
} public Person deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream=
new ObjectOutputStream(bos);
objectOutputStream.writeObject(this); ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream objectInputStream=new ObjectInputStream(bis);
return (Person) objectInputStream.readObject(); }
}
public class CloneDemo {

    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
Email email=new Email();
email.setContent("今天晚上20:00有课程");
Person p1=new Person("Mic");
p1.setEmail(email); // Person p2=p1.clone();
Person p2=p1.deepClone();
p2.setName("黑白");
p2.getEmail().setContent("今天晚上是20:30上课"); System.out.println(p1.getName()+"->"+p1.getEmail().getContent());
System.out.println(p2.getName()+"->"+p2.getEmail().getContent()); }
}
public class StoreRuleDemo {

    public static void main(String[] args) throws IOException {
ObjectOutputStream outputStream=
new ObjectOutputStream(new FileOutputStream(new File("user")));
User user=new User();
user.setAge();
user.setName("Mic");
user.setHobby("菲菲");
user.setSex("男");
outputStream.flush();
outputStream.writeObject(user);
System.out.println(new File("user").length());
outputStream.writeObject(user);
outputStream.flush();
outputStream.close();
System.out.println(new File("user").length()); }
}

序列化 (实现RPC的基础)的更多相关文章

  1. RPC的基础:调研EOS插件http_plugin

    区块链的应用是基于http服务,这种能力在EOS中是依靠http_plugin插件赋予的. 关键字:通讯模式,add_api,http server,https server,unix server, ...

  2. RPC框架基础概念理解以及使用初体验

    RPC:Remote Procedure Call(远程服务调用) RPC是做什么的 通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样. RPC可以基于HTTP或者 ...

  3. Restful,SAOP,SOA,RPC的基础理解

    什么是Restful restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构.而满足这些约束条件和原则的应用程序或设计就是 RESTful架构或服务. 主要的设计原则: 资源与URI ...

  4. 分布式RPC框架Dubbo实现服务治理:集成Kryo实现高速序列化,集成Hystrix实现熔断器

    Dubbo+Kryo实现高速序列化 Dubbo RPC是Dubbo体系中最核心的一种高性能,高吞吐量的远程调用方式,是一种多路复用的TCP长连接调用: 长连接: 避免每次调用新建TCP连接,提高调用的 ...

  5. .NET面试题系列[2] - .NET框架基础知识(2)

    3 程序集 面试出现频率:虽然很重要但不怎么出现,可能会考你定义,以及程序集包括什么,然后自然的话题就跑到反射上去了. 重要程度:8/10,很重要 需要理解的程度:知道程序集包括IL和元数据.知道元数 ...

  6. Hadoop学习笔记—3.Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  7. Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

  8. Hadoop源码解析之 rpc通信 client到server通信

    rpc是Hadoop分布式底层通信的基础,无论是client和namenode,namenode和datanode,以及yarn新框架之间的通信模式等等都是采用的rpc方式. 下面我们来概要分析一下H ...

  9. 每天收获一点点------Hadoop RPC机制的使用

    一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...

随机推荐

  1. Configure Virtual Serial Port Driver (vspd)注册表

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSBC7\Ports\COM3COM4] “Port1”=”COM3” “Port2”=” ...

  2. 安装Python时遇到的api-ms-win-crt-runtime-l1-1-0.dll 丢失问题

    api-ms-win-crt-runtime-l1-1-0.dll 丢失 电脑找不到api-ms-win-crt-runtime-l1-1-0.dll文件解决方法: 问题描述: 1.开机提示“api- ...

  3. iis重新注册.netframework4.0

    开始-运行-CMD  (管理员权限运行) %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 废话不多说直接上图:

  4. VBA Dumper v0.1.4.2, 提取office文档中的VBA代码,监查宏病毒恢复代码(演示版

    http://club.excelhome.net/thread-970051-1-1.html VBA Dumper 0.1.4.2更新,填补国内同类程序空白 此程序为演示版,可以在无office的 ...

  5. C++进阶--自定义new handler

    //############################################################################ // 自定义new handler /* ...

  6. Android开发之动态添加控件

    动态添加TextView控件: 一:创建一个Android project项目 activity_main.xml文件: 1.用两个LinearLayout布局分别包裹一对TextView,EditT ...

  7. [UE4]Return Node节点好用法

    蓝图自定义函数中,碰到“Return Node”也会推出当前的函数,跟高级语言的“return”是一样的用法

  8. [UE4]非常实用的插值Lerp

    Alpha的数值范围是0到1. if(Alpha==0) ReturnValue=A if(Alpha==1) ReturnValue=B 如果Alpha在0到1之间,Alpha值越接近0则ReVal ...

  9. asp.net mvc 5 单元测试小例子

    using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTest ...

  10. (转)C#读写共享文件

    原文地址:https://www.cnblogs.com/guohu/p/4694515.html using System; using System.Collections.Generic; us ...