数据持久化,序列化,反序列化,文件读写1
2019独角兽企业重金招聘Python工程师标准>>>
看了还是不是很懂,也暂时不知道具体怎么使用比较方便。
看了这些,再参考下项目的用法,序列号主要是把table表转化成string字符串,使用io文件操作保存到本地文件,加载时通过io加载出来,然后使用loadstring()方法,把string转化成table的数据。在此要注意的是,table序列化成string时,格式要方便使用loadstring方法。
还有一篇文章来自:http://dearymz.blog.163.com/blog/static/2056574200939103246797/
通常需要序列化一些数据,也就是将数据转换为一个字节流或字符流,然后就可以将其方便的持久化。文本序列化可选择的格式非常多:SOAP、Json甚至自定义xml等,不过lua脚本也是一个不错的选择方案。
本文在参考《Lua程序设计(第2版)》简体中文版 第12章 数据与持久化 12.2 和12.2.1 的基础上给出下面的实现。要注意的是该实现只能针对无环的table,并且不能对function、thread、userdata这三种类型进行序列化和反序列化。为了防止序列化后数据过大,也没有做精细的排版控制。
function serialize(obj)
local lua = ""
local t = type(obj)
if t == "number" then
lua = lua .. obj
elseif t == "boolean" then
lua = lua .. tostring(obj)
elseif t == "string" then
lua = lua .. string.format("%q", obj)
elseif t == "table" then
lua = lua .. "{\n"
for k, v in pairs(obj) do
lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
end
local metatable = getmetatable(obj)
if metatable ~= nil and type(metatable.__index) == "table" then
for k, v in pairs(metatable.__index) do
lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n"
end
end
lua = lua .. "}"
elseif t == "nil" then
return nil
else
error("can not serialize a " .. t .. " type.")
end
return lua
end
function unserialize(lua)
local t = type(lua)
if t == "nil" or lua == "" then
return nil
elseif t == "number" or t == "string" or t == "boolean" then
lua = tostring(lua)
else
error("can not unserialize a " .. t .. " type.")
end
lua = "return " .. lua local func = loadstring(lua)
if func == nil then return nil end
return func()
end
data = {["a"] = "a", ["b"] = "b", [1] = 1, [2] = 2, ["t"] = {1, 2, 3}}
local sz = serialize(data)
print(sz)
print("---------")
print(serialize(unserialize(sz)))
转载于:https://my.oschina.net/u/2005342/blog/317158
数据持久化,序列化,反序列化,文件读写1相关推荐
- 利用序列化进行文件读写
文章标题:利用序列化进行文件读写 原 作 者:vchelp 原 出 处:vchelp 发 布 者:loose_went 发布类型:转载 发布日期:2006-09-05 今日/总浏览:1/4935 在很 ...
- 爬虫数据持久化存储——写入文件
这里写目录标题 爬虫数据持久化存储--写入文件 open方法 文件的读取及写入 爬虫数据持久化存储--csv文件 爬虫数据处理:操作数据库模块--pymysql pymysql介绍: pymysql安 ...
- Part 10:iOS的数据持久化(1),文件,归档
本章中主要学习数据持久化与各种持久化方式的实现方法 沙箱目录 沙箱目录设计的原理就是只能允许自己的应用访问目录,而不允许其他的应用访问. 1. Documents 目录 大量的数据,经常变化,最重要的 ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- Android数据持久化
Android数据持久化(存储) 1.SharedPreferences SharedPreferences是Android提供的数据持久化的一种手段,适合单进程.小批量的数据存储与访问.Shared ...
- Redis Template使用append方法不起作用的解决办法以及序列化/反序列化的解释
今天使用Redis Template进行测试发现的问题, 遇到这个错 org.springframework.data.redis.serializer.SerializationException: ...
- mysql不能持久存储数据的是_数据持久化存储
一数据持久化存储-csv文件 1.作用 将爬取的数据存放到本地的csv文件中 2.使用流程 1.导入模块2.打开csv文件3.初始化写入对象4.写入数据(参数为列表)importcsv with op ...
- python异步读写文件_一文彻底搞懂python文件读写
Python文件读写 一,I/O操作 I/O在计算机中是指Input/Output,也就是Stream(流)的输入和输出.这里的输入和输出是相对于内存来说的,Input Stream(输入流)是指数据 ...
- python-day7-数据操作+TXT文件读写操作
python-day7-数据操作 一.数据分析 (一)定义 数据分析,指用专业的统计分析方法对大量数据进行分析,并加以详细研究和概括总结,提取有价值的信息,形成有效的分析结论,从而影响业务决策. (二 ...
- plist文件读写,序列化与反序列化,文件的读写[xcode4.4.1]
这篇学习目标: plist文件读写 对象序列化与反序列化 本地文件的读写 iCloud存储的API 引言 在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢? 它全名是:Prop ...
最新文章
- Happy WS 之 控制台 -- Happy Console (一)
- (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
- 常用抓包工具(可编程抓包工具)
- 索引 - 数据结构 - B+TREE
- 用eclipse创建动态web项目手动生成web.xml方法
- 动态规划——数塔(hdu2084)
- react setState里的作用域
- 配置实体框架DbContext的可扩展方案
- 自动化测试 (四) 自动卸载软件
- JAVA面向对象——继承
- MariaDB 10.3 instant ADD COLUMN亿级大表毫秒级加字段
- 【渝粤题库】陕西师范大学500009 微机原理
- php二维数组根据某个字段排序的排序(商品按销量或其他字段排序)
- Mybatis源码阅读之一——工厂模式与SqlSessionFactory
- 智能车的转弯部分_教训:渣土车“两米生死线”千万别跨!记者带你亲身体验...
- 【HTML+CSS】移动端布局之流式布局
- 大数据导论习题_《大数据导论(通识课版)》.PDF
- python图片转换成文字_在python中将图像转换为字节文字 - python
- php安全挑战赛,TSRC挑战赛: PHP场景中getshell防御思路分享
- 我为什么鼓励工程师写博客