序列化。草稿。

//1)非持久化程序.
//2)非持久化程序中的持久化.
//3)持久化程序.
//4)面向持久化开发的对比.
//5)某些持久化工具使用.
//6)小结.

//2)
//假如武器仓库非常庞大.100w条甚至更多.
//那么这个数据就必须持久化了.放在内存是不现实的.
//也不能一次从文件中读出.所以只能分批读起.
//之前仓库的public属性,必须改为private.封装起来.
//只提供,插入数据,和读起数据的方法.
//到这里突然发现.忽视了一个问题.
//持久化之后.之前存储了武器指针的地方.就是一个遗漏了.
//虽然使用智能指针.可以避免空指针的问题.
//但是要对这个数据做处理的时候.就会出现问题.
//比如,更换武器.
//之前的武器必须把used设置为false.
//但是可能此数据已经在文件中了.更改了内存的数据.但是无法反应到文件中.
//思考了一下,必须给所有需要持久化的数据,附加一个文件索引标志.
//当持久化时,把标志补充上去.这样所有的数据,都可以知道自己是否已经持久化了.
//内存中的操作,必须检测,并作出判断,是否要额外对外部数据进行更新.

//所以,内存持久化后,更新外部文件索引到内存.
//对内存的操作,检测是否已经持久化,并作出对应的操作.以保持数据一致性.但对于外部操作来说,不必知道数据是否持久.
//目前来说,持久化要解决的就是如何把原来通过指针定位数据的方法,在外部文件中实现,加个外部文件的索引给数据本身.就好了.
//一个是内存流和内存的关系(通过指针),一个是内存流和外部数据流的关系(通过2者都加一个外部数据索引)
//而外部数据和外部数据的相互关系,也是通过外部数据索引.
//所以是否,一开始就面向数据库开发.就已经解决了面向对象开发后,补充持久方案这种情况,需要的额外处理?
//比如自增列的值.就好比一个对象的内存地址.而没有自增列的表.就表示舍去对象的地址比较法,而用内存中的对象的成员数据组合来对比.
//ok.逻辑通了.开工测试.
//发现还有一个问题.持久化后的数据,如果要加载到内存中,如何让已经存在的删除.只保留一份?难道要采用链表模式,保留全局链头?
//怎么有点复杂了...难道要根据引数,来决定是否持久化.避免不统一问题.但是这个应该会影响数据的一致性.如果碰到程序中断问题.
//思索无果.
//非持久化的思路开发,要完美转到持久化.好像会死人.

//只能考虑实时的持久,才不会让开发难度扩大.最多封装一下,持久层.方便之后采用更灵活的方法..那基本就属于面向数据库开发了.没办法啊,关系型数据库这么流行.
//参考了一下最广泛使用的orm,一般有3种方式.Single-table,Joined-subclass,Table-per-concrete-class
//选择Table-per-concrete-class,第一种简单,但违背数据3范式.第二种,不错,但是可以稍微复杂了点.反正通过视图,可以也可以连接.
//每个具体类一个表,这样,生成对象时可以很简单的知道要插入数据了.表包含从基类继承的所有数据成员.、

时间: 2024-10-11 11:01:56

序列化。草稿。的相关文章

Json和序列化总结

一.序言 遇到问题,就经常逛园,不知你是否曾有,曾经遇到的问题,或者在园子里看到问题的方案,过一段时间,有可能还会摔跤,哈哈...大神请勿喷,小弟记忆不太好,还过来找资料,如果自己写把问题或某个知识点总结,问题会更深刻,自己写的东西更能熟悉的了解.看别人写的文章,那是相当的羡慕,可能因为不敢写,懒惰等等个人原因,一直处于跑步机上停留,从没前进一大步,一直只是想写阶段.今天尝试改变一点点过去的自己,从部分知识的梳理总结,在梳理过程中如果出现不对,错误的地方,还请大神多多指出.......废话少说,

C++ | boost库 类的序列化

是的,这是今年的情人节,一篇还在研究怎么用的文章,文结的时候应该就用成功了. 恩,要有信心 神奇的分割线 不知何时装过boost库的header-only库, 所以ratslam中的boost是可以编译的,但是我自己试的程序会编译不过, 提示错误是未定义的引用. 所以我就从安装boost库开始. 1. 到www.boost.org下载相应的库, 目前最新是1_60_0版本的链接打开 文件有点大 下载好后就可以安装了. 1. 我将文件解压缩在home目录下命名为BOOST_ROOT目录下. 2.

Hessian 2.0 序列化协议 - Hessian 2.0 Serialization Protocol 翻译

Hessian是一种轻量.快速的web协议,在微服务场景下经常被使用. Hessian协议实际上包含两种含义: 1. Web网络通信远程调用服务,具体可以参考:http://hessian.caucho.com/doc/hessian-ws.html 2. 数据序列化协议,即本篇文章的内容,原文来自于:http://hessian.caucho.com/doc/hessian-serialization.html Hessian的Web通讯协议中实际上包含了Hessian序列化的内容,但Hess

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

二叉树的序列化和反序列化

http://blog.csdn.net/qq_27703417/article/details/70958692 先序遍历二叉树,如果遇到空节点,就在str的末尾加上"#!","#"表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,"!"表示一个值的结束.如果遇到不为空的节点,假设节点值为3,就在str的末尾加上"3!".现在请你实现树的先序序列化. 先序遍历 import java.util.*; //使用递归

Java复习——I/O与序列化

File类 java.io.File只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问,我们可以通过通过给其构造函数传一个路径来构建以文件,传入的路径名有一个小问题,就是Windows和UNIX 中的路径分隔符斜杠方向的问题:"/" 表示 UNIX 中的根目录,"\" 表示Windows 的根目录.File类有静态的参数可以很简单的解决这个问题:pathSeparator就是其中一个.File类中常用的方法有: exists():测试此抽象路径名表

Java 深拷贝浅拷贝 与 序列化

一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会进行拷贝:(引用的对象只要求浅拷贝即可:若要深层拷贝,一般可利用序列化和反序列化来实现,也可手动实现各级引用对象的深层拷贝:) 二.实现: 浅拷贝:实现Cloneable接口,重写clone()方法,在clone()调用父类super.clone()即可: 深拷贝:1. 实现Cloneable接口,

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?