序列化 (实现RPC的基础)
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的基础)的更多相关文章
- RPC的基础:调研EOS插件http_plugin
区块链的应用是基于http服务,这种能力在EOS中是依靠http_plugin插件赋予的. 关键字:通讯模式,add_api,http server,https server,unix server, ...
- RPC框架基础概念理解以及使用初体验
RPC:Remote Procedure Call(远程服务调用) RPC是做什么的 通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样. RPC可以基于HTTP或者 ...
- Restful,SAOP,SOA,RPC的基础理解
什么是Restful restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构.而满足这些约束条件和原则的应用程序或设计就是 RESTful架构或服务. 主要的设计原则: 资源与URI ...
- 分布式RPC框架Dubbo实现服务治理:集成Kryo实现高速序列化,集成Hystrix实现熔断器
Dubbo+Kryo实现高速序列化 Dubbo RPC是Dubbo体系中最核心的一种高性能,高吞吐量的远程调用方式,是一种多路复用的TCP长连接调用: 长连接: 避免每次调用新建TCP连接,提高调用的 ...
- .NET面试题系列[2] - .NET框架基础知识(2)
3 程序集 面试出现频率:虽然很重要但不怎么出现,可能会考你定义,以及程序集包括什么,然后自然的话题就跑到反射上去了. 重要程度:8/10,很重要 需要理解的程度:知道程序集包括IL和元数据.知道元数 ...
- Hadoop学习笔记—3.Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
- Hadoop源码解析之 rpc通信 client到server通信
rpc是Hadoop分布式底层通信的基础,无论是client和namenode,namenode和datanode,以及yarn新框架之间的通信模式等等都是采用的rpc方式. 下面我们来概要分析一下H ...
- 每天收获一点点------Hadoop RPC机制的使用
一.RPC基础概念 1.1 RPC的基础概念 RPC,即Remote Procdure Call,中文名:远程过程调用: (1)它允许一台计算机程序远程调用另外一台计算机的子程序,而不用去关心底层的网 ...
随机推荐
- VS正则msdn地址
https://msdn.microsoft.com/zh-cn/library/2k3te2cs(v=vs.100).aspx 备查.vs里正则有很多特殊的规则.
- [CMAKE] 详解CMakeLists.txt文件
[快速查询]https://cmake.org/cmake/help/v2.8.8/cmake.html#section_Commands 1 CMake简介 CMake是跨平台编译工具,比make更 ...
- c#读取Sybase中文乱码的解决办法
最近需要从Sybase数据库中获取数据.用Sybase.Data.AseClient连接的话比较简单,但中文数据会有乱码.用Sybase自带的工具SQL Advantage设置好编码和语言,是可以正常 ...
- 黄聪:安装cnpm替代默认的npm
使用cnpm替代默认的npm: npm install -g cnpm --registry=https://registry.npm.taobao.org
- BlockingQueue队列
1.BlockingQueue定义的常用方法如下 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() ...
- IDEA运行tomcat8.5.35源代码
前提环境,安装和配置好java1.8+环境,maven,IDEA 1.下载Tomcat源代码:https://tomcat.apache.org/download-80.cgi#8.5.35 2.创建 ...
- 【springboot】之Application配置
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- Android keystore相关
一.生成keystorekeytool -genkey -alias test.keystore -keyalg RSA -validity -keystore test.keystore 二.查看 ...
- erlang 安装
[root@Aliyun software]# rpm -Uvh erlang-solutions-1.0.1.noarch.rpm [root@Aliyun software]# yum -y in ...
- datetime模块常用功能小结