序列化

.NET Framework源码研究系列之---ArrayList与LinkedList

十年热恋 提交于 2020-03-25 14:51:37
  在上一篇< .NET Framework源码研究系列之---马甲List >中我们一起研究了.NET中List的源代码,也得到一些兄弟的热心反馈.其中一位仁兄说希望看到ArrayList与LinkedList源代码,所以今天就以此为话题,大家一起看一下.NET中是如何实现ArrayList和LinkedList的.   我们先看ArrayList和LinkedList在.NET中的位置, ArrayList的命名空间是System.Collections,LinkedList的命名空间是System.Collections.Generic ,这么看来二者同属于集合类,只不过LinkedList在一个分支种.然而,稍对.NET的源码分析后,我们会发现二者有着明显的区别,甚至可以说有质的不同.有这些不同不是因为二者功能的不同,而是微软对它们的定位不同.在.NET源码物理结构中, ArrayList所在目录是"redbits\ndp\ clr\src\BCL\ System\Collections",LinkedList所在目录是"redbits\ndp\ fx\src\CompMod\ System\Collections\Generic" .由此可知, ArrayList属于CLR级别的,LinkedList仅仅是额外的扩展 .所以说二者其实没有比对的意义.  

Android第十八天

混江龙づ霸主 提交于 2020-03-25 13:23:21
3 月,跳不动了?>>> 一:内存流 1.ByteArrayOutputStream (内存输出流) public ByteArrayOutputStream() public byte[] toByteArray() 创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。 public String toString() 2.ByteArrayInputStream (内存输入流) public ByteArrayInputStream(byte[] buf) 二:数据流 1.DataOutputStream(数据输出流) 可以将基本数据类型以二进制的方式写入,附加数据类型。 DataOutputStream(OutputStream out) 2.DataInputStream(数据输入流) DataInputStream(InputStream in) 根据数据输出流的写入顺序依次读取数据。 三:序列化与反序列化 序列化:将对象转化成二进制形式的过程。易于保存、易于传输。 反序列化:将二进制数据转化成对象的过程。 只有实现了java.io.Serializable接口的类的对象才具有序列化和反序列化的功能。 1.ObjectOutputStream(对象输出流) ObjectOutputStream(OutputStream

day19模块1

狂风中的少年 提交于 2020-03-25 05:24:46
http://www.cnblogs.com/Eva-J/articles/7228075.html#_label10 collections模块: 在内置数据类型(dict、list、set、tuple)的基础上, collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。 1.namedtuple:生成可以使用名字来访问元素内容的tuple。 #namedtuple('名称', [属性list]): from collections import namedtuple Point=namedtuple('point',['x','y']) p=Point(1,2) print(p.x,p.y) namedtuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象。 d eque 除了实现list的 append() 和 pop() 外,还支持 appendleft() 和 popleft() ,这样就可以非常高效地往头部添加或删除元素。 from collections import deque d1=deque([1,2,'c',5]) d1.append('afg') d1.appendleft(9) print(d1) #结果deque([9, 1, 2, 'c

常用模块

时光毁灭记忆、已成空白 提交于 2020-03-25 05:24:07
re模块常用方法:   import re   ret = re.findall('a','qas fds asfwa') #返回所有满足条件的结果,放在列表里   print(ret)  #结果:['a','a','a']   ret = re.search('a','qas fds asfwa').group() #只找到第一个符合匹配的然后返回,一定要加group返回匹配的字符串,如果没有则返回None 结果:a   ret = re.match('a','abc').group() #跟search差不多,不过只在字符串开始处进行匹配,开头不是会报错  结果:a   ret = re.split('[ab]','abcd') #先按'a'分割得到''和'bcd',在对''和‘bcd’分别按'b'分割 结果:['','','cd']   ret = re.sub('\d','H','fdsf32cs3fds1' ,2) #将数字替换成 ’H',只替换前2个值,不写则全部替换   ret = re.subn('\d','H','fdsf32cs3fds1' ) #返回的是元组,不写值替换所有   obj = re.compile('\d{3}')    #编译成一个正则表达式对象,匹配连续3个数字,可以多次调用这个对象   ret = obj.search('a324e')  

常用模块(一)

点点圈 提交于 2020-03-25 05:23:07
什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。 但其实import加载的模块分为四个通用类别: 使用python编写的代码(.py文件) 已经被编译为共享库或DLL的C或C++扩展 包好一组模块的包 使用C编写并链接到python解释器的内置模块 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更加清晰,方便管理,这时候我们不仅仅可以把这些文件当作脚本去执行,还可以把它们当作模块来导入到其他的模块中,实现了功能的重复利用。 模块的导入和使用 模块的导入应该在程序最开始的地方。 常用模块 collections模块 在内置数据类型(dict,list,set,tuple)的基础上,collections模块还提供了几个额外的数据类型:counter,deque,defaultdict,namedtuple,OrderedDict等 namedtuple: 生成可以使用名字来访问元素内容的tuple deque: 双端队列

第二十一天 PYTHON学习

拟墨画扇 提交于 2020-03-25 04:53:44
【今日学习】 一、什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。 二、为什么要序列化? 1:持久保存状态【硬盘存】 需知一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,'状态'会以各种各样有结构的数据类型(也可简单的理解为变量)的形式被保存在内存中。 内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。 在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。 具体的来说,你玩使命召唤闯到了第13关,你保存游戏状态,关机走人,下次再玩,还能从上次的位置开始继续闯关。或如,虚拟机状态的挂起等。 2:跨平台数据交互【网络传】 序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。 json模块【转化成str类型】

Py西游攻关之模块

萝らか妹 提交于 2020-03-25 04:52:47
Py西游攻关之模块 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。 使用模块有什么好处? 最大的好处是大大提高了代码的可维护性。 其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。 所以,模块一共三种: python标准库 第三方模块 应用程序自定义模块 另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。 模块导入方法 1 import 语句 1 import module1[, module2[,... moduleN] 当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?答案就是解释器有自己的搜索路径,存在sys.path里。   1 2 [' ', ' / usr / lib /

java常用注解-Jackson常用注解

断了今生、忘了曾经 提交于 2020-03-24 13:06:08
3 月,跳不动了?>>> Jackson的依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>版本号</version> </dependency> <!-- 支持xml格式 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>版本号</version> <

redis 存储java对象 两种方式

拥有回忆 提交于 2020-03-24 12:00:36
根据redis的存储原理,Redis的key和value都支持二进制安全的字符串 1.利用序列化和反序列化的方式 存储java对象我们可以通过对象的序列化与反序列化完成存储于取出,这样就可以使用redis存储java对象了 第一步:先创建redisUtil package com.runtai.redis; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisUtil { private static String ip="localhost"; private static int port=6379; private static int timeout=10000; private static JedisPool pool=null; static{ JedisPoolConfig config=new JedisPoolConfig(); config.setMaxTotal(1024);//最大连接数 config.setMaxIdle(200);//最大空闲实例数 config.setMaxWaitMillis(10000);//等连接池给连接的最大时间

五分钟让你了解RPC原理详解

人盡茶涼 提交于 2020-03-24 01:20:42
RPC 功能目标 RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性 。 为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。 下面我们将具体细化 stub 结构的实现。 RPC 调用分类 RPC 调用分以下两种 : 同步调用 客户方等待调用执行完成并返回结果。 异步调用 客户方调用后不用等待执行结果返回,但依然可以通过回调通知等方式获取返回结果。 若客户方不关心调用返回结果,则变成单向异步调用,单向调用不用返回结果。 异步和同步的区分在于是否等待服务端执行完成并返回结果。 RPC 结构拆解 如下图所示。 RPC 服务方通过 RpcServer 去导出(export)远程接口方法,而客户方通过 RpcClient 去引入(import)远程接口方法。 客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理 RpcProxy 。 代理封装调用信息并将调用转交给 RpcInvoker 去实际执行。 在客户端的 RpcInvoker 通过连接器 RpcConnector 去维持与服务端的通道 RpcChannel , 并使用 RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。 RPC 服务端接收器