序列化

Google Protocol Buffers 概述

心已入冬 提交于 2020-02-08 23:18:42
Google Protocol Buffers 概述 个人小站,正在持续整理中,欢迎访问: http://shitouer. cn 小站博文地址: Google Protocol Buffers 概述 推荐阅读顺序,希望给你带来收获~ 《 Google Protocol Buffers 概述 》 《 Google Protocol Buffers 入门 》 《 Protocol Buffers 语法指南 》 《 Google Protocol Buffers 编码(Encoding) 》 1. 概述 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 本文概述介绍Protocol Buffers,以及开始如何开始Protocol Buffers之旅,本系列主要以Java为主(虽然超想看Python的,无奈学的还不够...)。 以下Protocol Buffers简称PB。 2. Protocol Buffers是什么 Protocol Buffers提供了一种灵活,高效,自动序列化结构数据的机制,可以联想XML,但是比XML更小,更快

Python学习week4

五迷三道 提交于 2020-02-08 22:50:14
装饰器:本质是函数,用来装饰其他的函数,为其它函数添加附加功能。 原则:不能改变被装饰函数的源代码和调用方式。 1、函数即‘变量’,定义一个函数相当于把函数体赋值给函数名,匿名函数相当于只有函数体没有函数名 def func1(): print('in the function') func2=func1 #和普通的整数赋值一样:a=2 b=a print(b) func2() 2、高阶函数 3、嵌套函数 装饰器=高阶函数+嵌套函数 高阶函数: 1、把一个函数名当作实参传递给另外一个函数;(在不修改被装饰函数源代码的情况下为其添加功能) 2、返回值中包含函数名。(不修改函数的调用方式) import time def bar(): time.sleep(2) print('in the bar') def timer(func): start_time=time.time() func() stop_time=time.time() print('the time of running is %s'%(stop_time-start_time)) timer(bar) 输出: in the bar the time of running is 2.0002079010009766 函数执行计时器 import time def bar(): time.sleep(2) print(

Flink之KafkaConnector

柔情痞子 提交于 2020-02-08 18:33:54
1.1 Kafka背景 最初由Linkedin 开发的分布式消息中间件现已成为Apache顶级项目 Broker:Kafka中指部署了Kafka实例的服务器节点 Topic:用来区分不同类型信息的主题 Partition:每个topic可以有一个或多个partition(分区)。分区是在物理层面上的,不同的分区对应着不同的数据文件。Kafka使用分区支持物理上的并发写入和读取,从而大大提高了吞吐量 Record:实际写入Kafka中并可以被读取的消息记录。每个record包含了key、value和timestamp Producer:生产者,用来向Kafka中发送数据(record) Consumer:消费者,用来读取Kafka中的数据(record) Offset( 生产offset,消费offset,offset lag):offset lag是kafka消费数据和生产数据的距离偏移量,在0.8版本的时候记录在zk里面,0.9开始用特定的topic来记录 Consumer Group:为了区分不同消费者消费数据的偏移量,提出了消费者组概念,相同消费组会改变相同的偏移量 1.2 引入依赖 Flink读取kafka数据需要通过maven引入依赖: <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink

阿里FastJson2JsonRedisSerializer.java作为内部类强化RedisConfig的序列化实现

醉酒当歌 提交于 2020-02-08 06:24:23
任何存储都需要序列化 任何存储都需要序列化。只不过 常规 你在用 DB一类存储 的时候,这个事情 DB帮你在内部已经实现了 (直接把 SQL带有类型的数据 转换成 内部序列化的格式 , 存储 ; 读取时再解析出来 )。 而Redis 并不会 帮你做 序列化 这个事情。当你用Redis的key和value时, value对于redis 来讲就是个 byte array, 需要把 需要的数据结构 转换成 byte array ,存储,等读取时 再读出来 。 若是 字符串 ,因为 字符串 本来几乎就是 byte array 了,所以不需要自己处理; 若是 boolean类型 的true/false;你要自己定义redis里怎么表示true和false。比如你可以用1代表true,0代表false;也可以用“true”这个字符串代表true,“false”这个字符串代表false; 若是 数字 ,可以直接存储数字的字符串表示(5 --> '5'),然后读取时再把数字字符串转回来(parseInt/parseDouble/...); 若是 时间/日期 ,可以自己定义一种字符串表达,比如epoc timestamp这个数的字符串表示,又或者是ISO8601的格式。 若是 复杂的数据结构 ,你需要自己 用某种序列化格式 来存,可以是 json , protobuf , avro , java

设计模式&单例模式

寵の児 提交于 2020-02-08 02:08:56
一、首篇自序 第一次整理博客,会稍微啰嗦讲几句,希望大家不要喷我^_^^_^,初来乍到不是很有经验。 今天开始陆续会尽我一切的能力写一系列关于java文章内容,要是哪里做的不好,还希望大家多多指教。 我会接受大家的意见,不断进步。 当然也希望我的文章能够帮助到大家,哪怕是一点点也好。 尤其是java需要循序渐进的去学习,去进步,一口吃成胖子是很难。 如果在坐的大家有想学习java,或者正在初学java的小伙伴,请不要着急。 个人觉得要学好java最好的方式就是:首先要舍得付出,其次每天要求自己学习2小时计划,再就是要合理的回顾以及练习。 这样坚持下去,走好每一天,不要烦躁这个想学那个想学。最后时间走了,学到的东西都是半斤八两。 当然这只是我个人的意见,大家有什么好的学习建议也可以分享分享。 最后废话不多说了,今天开始给大家总结一下设计模式中的《单例模式》。 后续的博客规划:设计模式、并发编程、Spring核心原理、Mybatis源码分析、IO/Netty、SpringBoot、SpringCloud、Apache Dubbo、Zookeeper、Nacos、Sentinel,kafka原理分析、RabbitMQ原理分析、RocketMQ原理分析、docker、k8s 。。。。。。 二、单例设计模式讲解内容(由于最近工作也是比较饱和时间有限,后续会将文章相关源码托管到git上

DRF框架之ModelSerializer序列化器

谁说我不能喝 提交于 2020-02-07 20:08:58
ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样。 ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成一系列字段 基于模型类自动为Serializer生成validators,比如unique_together 包含默认的create()和update()的实现 在使用 ModelSerializer序列化器时,我们只需要定义好序列化器类,并指定好对应的模型类和字段即可。 例如: # 定义ModelSerializers序列化器 class BookInfoModelSerializer(serializers.ModelSerializer): '''定义图书信息的ModelSerializers序列化器''' class Meta: # 指定序列化器对应的模型类 # model = 模型类名 model = BookInfo # 指定序列化和反序列化操作的字段 fields = '__all__' # __all__表示所有字段进行序列化 Shell测试代码: >>> from booktest.serializers import BookInfoModelSerializer >>> s = BookInfoModelSerializer() >>> s

21 缓冲流、转换流、序列化流、打印流

主宰稳场 提交于 2020-02-07 02:05:02
第一章 缓冲流 昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础之上创建而来的,就像穿上铠甲的武士一样,相当于是对基本流对象的一种增强。 1.1 概述 缓冲流,也叫高效流,是对4个基本的 FileXxx 流的增强,所以也是4个流,按照数据类型分类: 字节缓冲流 : BufferedInputStream , BufferedOutputStream 字符缓冲流 : BufferedReader , BufferedWriter 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。 1.2 字节缓冲流 构造方法 public BufferedInputStream(InputStream in) :创建一个 新的缓冲输入流。 public BufferedOutputStream(OutputStream out) : 创建一个新的缓冲输出流。 构造举例,代码如下: // 创建字节缓冲输入流 BufferedInputStream bis = new BufferedInputStream ( new FileInputStream ( "bis.txt" )

深入tensorflow1.x

夙愿已清 提交于 2020-02-07 00:22:35
文章目录 一、tensorflow 安装 二、核心概念 2.1 计算图 2.2 Tensor 2.3 会话Session 2.4 两层神经网络 三、深层神经网络 目前所有的算法是基于1.12版本的tensorflow的实现,所以有必要学习一下1.x版本的tensorflow。 一、tensorflow 安装 基于tensorflow 1.4及以上 tensorflow的两个重要的依赖包: protocol buffer:谷歌开发的结构化数据处理工具,例如json,xml等。 主要的功能是把结构化的数据序列化进行网络传输或存储,然后把序列化的数据再反序列化为结构化数据。protocol buffer 需要定义数据的schema,利用schema来还原数据。使用 - protocol buffer序列化的数据比xml小3到10倍,反序列化时也快20到100倍。 tensorflow系统中的数据基本上都使用protocol buffer来组织的,分布式的tensorflow的通信协议也gRPC也是以protocol buffer为基础的。 bazel:谷歌开源的自动化构建工具,谷歌内部的绝大部分应用都是通过bazel构建的。功能类似于Maven等。 可以使用pip安装、docker安装及源码编译安装。 mac使用pip安装1.12.0版本的: pip install --ignore

DRF框架之序列化器初体验

故事扮演 提交于 2020-02-06 14:57:08
首先,我们需要明白序列化和反序列化的过程指的是什么。 序列化操作:将模型数据 ---> 字典数据 --->JSON数据(添加、修改数据的操作) 反序列化操作:将JSON数据 ---> 字典数据 --->模型数据(响应JSON数据的操作) 接下来,我们将学习DRF框架,通过DRF框架来提高我们开发API的效率。 什么是DRF框架? Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具。 通常简称为DRF框架 或 REST framework。 DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。 DRF框架的特点是什么? 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化; 提供了丰富的类视图、Mixin扩展类,简化视图的编写; 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要; 多种身份认证和权限认证方式的支持; 内置了限流系统; 直观的 API web 界面; 可扩展性,插件丰富 为什么要学习DRF框架? 通过昨天开发的REST API程序,我们也了解到了使用原生的Django框架想要完成序列化和反序列化的代码编写有多么麻烦。 然而,DRF框架为我们将序列化和反序列化的操作进行了高度的封装

Netty高级

℡╲_俬逩灬. 提交于 2020-02-06 01:45:35
Netty 快速 入门 什么 是 N etty Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。 N etty 应用场景 1. 分布式 开源框架中 dubbo、Zookeeper , RocketMQ 底层 rpc 通讯 使用 就是 netty 。 2. 游戏 开发 中 ,底层 使用netty通讯 。 为什么 选择 netty 在本小节,我们总结下为什么不建议开发者直接使用 JDK 的 NIO 类库进行开发的原因: 1) NIO 的类库和 API 繁杂,使用麻烦,你需要熟练掌握 Selector 、 ServerSocketChannel 、 SocketChannel 、 ByteBuffer 等; 2) 需要具备其它的额外技能做铺垫,例如熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的 NIO 程序; 3) 可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处 n 理等等, NIO 编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大; 4) JDK NIO 的 BUG ,例如臭名昭著的 epoll bug ,它会导致 Selector