序列化

11.python内置模块之json模块

两盒软妹~` 提交于 2020-02-29 16:55:48
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。 在python中,有专门处理json格式的模块—— json 和 picle模块。Json 模块提供了四个方法: dumps、dump、loads、load。pickle 模块也提供了四个功能:dumps、dump、loads、load。 json模块: json.dumps(): 对数据进行编码;只完成了序列化为str。 json.loads(): 对数据进行解码;只完成了反序列化。 json.dump(): 对数据进行编码;必须传文件描述符,将序列化的str保存到文件中。(处理的是文件而不是字符串) json.load(): 对数据进行解码;只接收文件描述符,完成了读取文件和反序列化。(处理的是文件而不是字符串) 查看源码区别: # dumps源码 def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None,separators=None,default=None, sort_keys=False

Springboot2.0整合Redis时的序列化与反序列化

戏子无情 提交于 2020-02-29 15:57:38
首先说一下环境: springboot:2.1.7 redis:5.0.5 在默认的情况下,两者整合后便可将数据缓存到redis,但是缓存进去的对象类型数据是经过jdk默认序列化过后的,在可视化工具中是HEX格式,看起来非常不方便,所以需要进行格式化 首先创建 FastJsonRedisSerializer 类实现 RedisSerializer 接口 public class FastJsonRedisSerializer < T > implements RedisSerializer < T > { public static final Charset DEFAULT_CHARSET = Charset . forName ( "UTF-8" ) ; private Class < T > clazz ; public FastJsonRedisSerializer ( Class < T > clazz ) { super ( ) ; this . clazz = clazz ; } @Override public byte [ ] serialize ( T t ) throws SerializationException { if ( t == null ) { return new byte [ 0 ] ; } return JSON .

Java中对象序列化与反序列化

…衆ロ難τιáo~ 提交于 2020-02-29 08:43:10
1. 概念 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 把对象的字节序列永久地保存到 硬盘 上,通常存放在一个文件中; 在网络上传送对象的字节序列。   在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。   当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 2. JDK类库中的序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。   java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。  

Java序列化

耗尽温柔 提交于 2020-02-29 03:50:12
1 序列化 1.1 序列化概述 Java中提供了一种序列化操作的方式,用一个字节序列化来表示一个对象,该字节序列化中保存了==【对象的属性】,【对象的类型】和【对象的数据】 。把字节序列化保存到文件中,就可以做到 持久化==保存数据内容。 从文件中读取字节序列化数据,可以直接得到对应的对象。 1.2 ObjectOutputStream类 将对象数据序列化,保存到文件中 构造方法 Constructor ObjectOutputStream(OutputStream out); 输出字节流对象作为当前方法的参数 1.3 ObjectInputStream类 从文件中读取被序列化之后的字节数据,提供反序列化操作,得到一个对象。 构造方法 Constructor ObjectInputStream(InputStream in); 需要提供一个字节输入流对象来进行操作 1.4 序列化注意事项 1. 如果一个类需要进行序列化操作, 必须遵从 。java.io.Serializable。不遵从无法进行序列化操作 2. 序列化之后从文件中读取序列化内容,转换成对应的对象, ClassNotFoundException 对应类没有找到。 对应的类型没有导包,不存在… InvalidClassException 类型不一样 序列化之后的每一个类都会有一个serialVersionUID

RPC和Restful(转载)

二次信任 提交于 2020-02-29 01:32:29
RPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实现有 XML-RPC , JSON-RPC , 通信方式基本相同, 所不同的只是传输数据的格式. RPC是分布式架构的核心,按响应方式分如下两种: 同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作 异步调用:客户端把消息发送给中间件,不再等待服务端返回,直接继续自己的操作。 同步调用的实现方式有WebService和RMI。Web Service提供的服务是基于web容器的,底层使用http协议,因而适合不同语言异构系统间的调用。RMI实际上是Java语言的RPC实现,允许方法返回 Java 对象以及基本数据类型,适合用于JAVA语言构建的不同系统间的调用。 异步调用的JAVA实现版就是JMS(Java Message Service),目前开源的的JMS中间件有Apache社区的ActiveMQ、Kafka消息中间件,另外有阿里的RocketMQ。 RPC架构里包含如下4个组件: 1、 客户端(Client):服务调用方 2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方 3、 服务端存根(Server Stub)

Java序列化——transient关键字和Externalizable接口

百般思念 提交于 2020-02-28 23:36:09
提到Java序列化,相信大家都不陌生。我们在序列化的时候,需要将被序列化的类实现Serializable接口,这样的类在序列化时,会默认将所有的字段都序列化。那么当我们在序列化Java对象时,如果 不希望对象中某些字段被序列化 (如密码字段),怎么实现呢?看一个例子: import java.io.Serializable; import java.util.Date; public class LoginInfo implements Serializable { private static final long serialVersionUID = 8364988832581114038L; private String userName; private transient String password;//Note this key word "transient" private Date loginDate; //Default Public Constructor public LoginInfo() { System.out.println("LoginInfo Constructor"); } //Non-Default constructor public LoginInfo(String username, String password) { this

Android 序列化 & 反序列化

女生的网名这么多〃 提交于 2020-02-28 23:01:46
###What? 何为序列化与反序列化? ***序列化:***将对象转化为二进制序列的过程 ***反序列化:***将二进制序列恢复为原始对象的过程 ###Why? 为什么需要序列化? 由于在系统底层,数据以简单的字节序列形式进行传递,即在底层,系统不认识对象,只认识字节序列,所以为了达到跨进程通讯的目的,需要先对数据进行序列化;其次,在进行网络数据传输或者activity间对象传递时,也需要先将对象转化为字节序列。 ###How? 如何进行序列化? 在Android中,序列化操作有两种方式:实现Serializabale接口或实现Parcelable接口。 Serializabale接口 Serializabale接口是一个空接口,实际上只提供标记的功能,标记实现了该接口的对象是可以进行序列化的,而具体的序列化与反序列化操作是由ObjectOutputStream和ObjectInputStream完成的。序列化与反序列化过程均对用户透明,其中需要保存许多额外的字段以保证反序列化过程能够顺利完成,同时,在这个过程中,还涉及到Java反射机制,所以整体时空开销比较大。 Parcelable接口 Parcelable是Android提供的接口,它主要是通过writeToParcel(),将需要持久化的字段保存到一个Parcel对象里面,然后通过CREATOR从Parcel对象中

Springboot使用alibaba的fastJson,@JSONField不起作用的问题

余生长醉 提交于 2020-02-28 13:52:07
在Springboot中默认的JSON解析框架是jackson 今天引入alibaba的fastjson,使用@JSONField(serialize=false),让@RestController转换数据给前端的时候不序列化莫些字段,发现@JSONField根本不起作用 在网上查阅了一番,发现Springboot使用fastjson需要替换默认的json转换器的 具体解决方法有两种: 本文借鉴地址:https://blog.csdn.net/qq_28929589/article/details/79245774 一、(1)启动类继承extends WebMvcConfigurerAdapter (2)覆盖方法configureMessageConverters 二、(1)在App.java启动类中,注入Bean : HttpMessageConverters 第一种方式: 启动类继承WebMvcConfigurerAdapter,然后对configureMessageConverters方法进行重写 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters);

RPC是什么?

為{幸葍}努か 提交于 2020-02-28 10:50:16
目录 1、什么是RPC? 2、典型RPC调用框架 3、Thrift框架介绍 1、什么是RPC? (1)RPC(remote procedure call):远程调用过程。 服务器A部署应用a,服务器B部署应用b,当A服务器调用B服务器上的b应用的函数或者方法时,因为不在同一内存空间,不能直接调用,必须通过网络来表达调用的语义传达调用的数据。 既然是调用B机器上的服务,那A机器自己也创建一个这个服务不就也可以调用了么。原理上是可以这么做,但是随着计算机的横向发展,集群的出现,使得多台机器部署成一个集群来对外提供服务。无法在一个进程内甚至同一台计算机上完成的需求就得需要RPC来实现了。 RPC的框架很多,比如最早的额CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至是Rest API。 (2) 本地过程调用过程 RPC就是要像调用本地的函数一样去调远程函数。在研究RPC前,我们先看看本地调用是怎么调的。假设我们要调用函数Multiply来计算lvalue * rvalue的结果: 1 int Multiply(int l, int r) { 2 int y = l * r; 3 return y; 4 } 5 6 int lvalue = 10; 7 int rvalue = 20; 8 int l_times_r = Multiply

高性能Java序列化框架Fse发布

删除回忆录丶 提交于 2020-02-28 04:22:39
高性能Java序列化框架Fse发布 使用场景 将Java对象序列化为二进制数据进行保存,以及二进制数据反向序列化为Java对象,在很多场景中都有应用。比如将对象序列化后离线存储至其他介质,或者存储于Redis这样的缓存之中。 目前常见的有几种框架可以支撑,比如 Hession ,Kryo,Protobuf,JDK原生等。有一些框架需要提前编写元数据配置文件以支撑跨语言序列化能力,比如 Protobuf 。不过如果团队的技术栈是统一的 Java 体系的话,则能够开箱即用的序列化框架使用起来会更加方便一些,特别有些时候对象特别复杂,编写元数据配置文件也是很繁琐的一个事情。 Fse 框架正是应用于这样的场景,不需要编写元数据配置信息,开箱即用的 Java 序列化框架,对需要序列化的对象没有任何特殊要求。在性能基准测试中,该框架的性能表现显著优于其他框架,下面是测试对比 欢迎加入技术交流群186233599讨论交流,也欢迎关注笔者公众号:风火说。 使用说明 首先在Pom文件中引入依赖,如下 <dependency> <groupId>com.jfireframework</groupId> <artifactId>fse</artifactId> <version>aegean-1.0</version> </dependency> API 使用方式如下 Fse fse = new Fse