当前位置: 首页 > news >正文

网站更换网址如何查找建设网站分析

网站更换网址如何查找,建设网站分析,宁乡住房和城乡建设局网站,有赞微商城商家登录1 什么是序列化、反序列化 在Java编程实践中,当我们需要持久化Java对象,比如把Java对象保存到文件里,或是在网络中传输Java对象时,序列化机制就发挥着关键作用。 序列化:指的是把数据结构或对象转变为可存储、可传输的…

1 什么是序列化、反序列化

        在Java编程实践中,当我们需要持久化Java对象,比如把Java对象保存到文件里,或是在网络中传输Java对象时,序列化机制就发挥着关键作用。

        序列化:指的是把数据结构或对象转变为可存储、可传输的格式,常见的是二进制字节流;当然,像JSON、XML这类文本格式也可用于序列化。

        反序列化:则是将序列化过程中生成的数据,还原成原始数据结构或对象的操作。 在Java这门典型的面向对象编程语言里,我们序列化的对象,本质上是类(Class)实例化后的产物。这一点和C++有所不同,在C++这种兼具面向对象和面向过程特性的语言中,struct主要用于定义数据结构类型,class才对应对象类型。

        序列化与反序列化有着广泛的应用场景:

 ①网络通信:在对象进行网络传输,比如远程方法调用(RPC)时,发送前必须先完成序列化,接收方收到序列化后的对象,还得进行反序列化,才能正常使用。

 ②文件存储:将对象保存到文件前,需要先序列化;后续从文件中读取对象时,则要执行反序列化操作,这样才能把存储的内容还原成可用的对象。

 ③数据库交互:当把对象存入数据库(如Redis),序列化不可或缺;从缓存数据库中读取对象时,反序列化同样必不可少,确保数据能以正确的对象形式被程序处理。

 ④内存操作:在将对象存入内存前,需要序列化;从内存读取对象后,通过反序列化,让对象恢复到可操作状态。

        维基百科对序列化的定义为:在计算机科学的数据处理领域,序列化是把数据结构或对象状态转化为可读取格式的过程,这些格式可以存入文件、缓存,或者在网络中传输,以便后续在相同或不同的计算机环境里,能够恢复对象的原始状态。按照序列化格式重新获取字节,就能生成和原始对象语义相同的副本。不过,对于很多包含大量引用的复杂对象,实现这种序列化重建的过程颇具挑战。在面向对象编程中,对象序列化并不涵盖原始对象关联的函数,这一过程也叫对象编组(marshalling)。而从一系列字节中提取数据结构的逆向操作,就是反序列化(也叫解编组、deserialization、unmarshalling )。

        总的来说,序列化的核心目的是让对象能够通过网络传输,或是将其存储到文件系统、数据库、内存等介质中,为Java程序在数据持久化与通信交互场景下,提供了至关重要的技术支持 ,是Java开发者必须掌握的关键技术点。

2 序列化协议对应于 TCP/IP 4 层模型的哪一层?

网络通信的双方必须要采用和遵守相同的协议。TCP/IP 四层模型是下面这样的,序列化协议属于哪一层呢?

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

如上图所示,OSI 七层协议模型中,表示层做的事情主要就是对应用层的用户数据进行处理转换为二进制流。反过来的话,就是将二进制流转换成应用层的用户数据。这就对应的是序列化和反序列化么?

因为,OSI 七层协议模型中的应用层、表示层和会话层对应的都是 TCP/IP 四层模型中的应用层,所以序列化协议属于 TCP/IP 协议应用层的一部分。

3 常见序列化协议有哪些?

JDK 自带的序列化方式一般不会用 ,因为序列化效率低并且存在安全问题。比较常用的序列化协议有 Hessian、Kryo、Protobuf、ProtoStuff,这些都是基于二进制的序列化协议。

像 JSON 和 XML 这种属于文本类序列化方式。虽然可读性比较好,但是性能较差,一般不会选择。

JDK 自带的序列化方式

JDK 自带的序列化,只需实现 java.io.Serializable接口即可。

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Builder
@ToString
public class RpcRequest implements Serializable {private static final long serialVersionUID = 1905122041950251207L;private String requestId;private String interfaceName;private String methodName;private Object[] parameters;private Class<?>[] paramTypes;private RpcMessageTypeEnum rpcMessageTypeEnum;
}

Kryo

Kryo 是一个高性能的序列化/反序列化工具,由于其变长存储特性并使用了字节码生成机制,拥有较高的运行速度和较小的字节码体积。

另外,Kryo 已经是一种非常成熟的序列化实现了,已经在 Twitter、Groupon、Yahoo 以及多个著名开源项目(如 Hive、Storm)中广泛的使用。序列化和反序列化相关的代码如下:

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;public class KryoSerializer {private static final ThreadLocal<Kryo> kryoThreadLocal = ThreadLocal.withInitial(() -> {Kryo kryo = new Kryo();kryo.register(RpcRequest.class);return kryo;});public static byte[] serialize(RpcRequest request) {try (ByteArrayOutputStream bos = new ByteArrayOutputStream();Output output = new Output(bos)) {Kryo kryo = kryoThreadLocal.get();kryo.writeObject(output, request);return output.toBytes();} catch (Exception e) {throw new RuntimeException(e);}}public static RpcRequest deserialize(byte[] bytes) {try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);Input input = new Input(bis)) {Kryo kryo = kryoThreadLocal.get();return kryo.readObject(input, RpcRequest.class);} catch (Exception e) {throw new RuntimeException(e);}}
}

Protobuf

Protobuf 出自于 Google,性能还比较优秀,也支持多种语言,同时还是跨平台的。就是在使用中过于繁琐,因为你需要自己定义 IDL 文件和生成对应的序列化代码。这样虽然不灵活,但是,另一方面导致 protobuf 没有序列化漏洞的风险。

Protobuf 包含序列化格式的定义、各种语言的库以及一个 IDL 编译器。正常情况下你需要定义 proto 文件,然后使用 IDL 编译器编译成你需要的语言

一个简单的 proto 文件如下:

// protobuf的版本
syntax = "proto3";
// SearchRequest会被编译成不同的编程语言的相应对象,比如Java中的class、Go中的struct
message Person {//string类型字段string name = 1;// int 类型字段int32 age = 2;
}

    http://www.yayakq.cn/news/289754/

    相关文章:

  1. 企业内部网站取商标名字神器
  2. 做外贸建网站需要推广吗wordpress wp_head()在哪个文件中
  3. 怎么学做淘宝电商网站wordpress如何发布视频
  4. 有哪些网站做的比较好看的图片使用他人商标做网站搜索词
  5. 3合1网站建设冠县 网站建设
  6. 门户网站后台管理模板123上网之家网址
  7. 潍坊网站建设小程序网站开发推广招聘
  8. 建设方面的知识 网站做视频搬运哪个网站最赚钱
  9. 手机怎么做三个视频网站黄页推广平台有哪些
  10. 手机网站建设咨询电话ui kits
  11. h5网站开发实例教程广州移动端网站建设
  12. 大型电子商务网站建设成本设计素材网站官网
  13. 韩国 电商网站网站制作的困难和解决方案
  14. 网站建设工作室发展建立自己的平台网站吗
  15. joomla做的网站国际外贸平台有哪些
  16. 建设网站成本预算手机网站开发设计包括什么
  17. 网站开发毕业设计做设计什么网站可以兼职
  18. 网页制作素材图片百度云网站做优化有几种方式
  19. 做网站的条件好看大方的企业网站源码.net
  20. 成都房地产网站开发企业网站维护外包
  21. 网站建设项目设计的图片做网站怎么挣钱赚钱
  22. 前端开发学习网站做外国美食的视频网站
  23. 做网站怎么收集资料163公司邮箱登录入口
  24. 做外贸推广的网站有哪些360网站备案查询
  25. 网站制作协议oppo商城
  26. wordpress怎么给产品设置分类湖南seo优化企业
  27. 企业网站开发周期搜索推广和场景推广
  28. dede安装好后是模板怎么变成做好的网站codeigniter 手机网站开发
  29. 平乡网站建设唐山城乡建设网站
  30. 电烤箱做蛋糕网站互联网企业网站设计