社区
C++ 语言
帖子详情
C++ Standard的串行化问题
piethy
2003-10-17 01:27:18
如何在C++ Standard中实现类的串行化,不依赖MFC或者其他系统相关的类库
请提供示例源代码
...全文
85
3
打赏
收藏
C++ Standard的串行化问题
如何在C++ Standard中实现类的串行化,不依赖MFC或者其他系统相关的类库 请提供示例源代码
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bilbo0214
2003-10-17
打赏
举报
回复
可能我的源文件字符集有问题,中文都变成"ÎļþдÈëÊ
了。
VC++6这个编译器有时候让人头疼。
bilbo0214
2003-10-17
打赏
举报
回复
//串行化实现,但是std::ios_base在Dev-C++4.9.7.0下提示未定义的错误,VC++6下可以编译
#if !defined SERSTREAM_H
#define SERSTREAM_H
#include <fstream>
using std::ios_base;
const long TruePattern = 0xfab1fab2;
const long FalsePattern = 0xbad1bad2;
class DeSerializer
{
private:
std::ifstream _stream;
public:
DeSerializer (std::string const & nameFile)
: _stream (nameFile.c_str (), ios_base::in | ios_base::binary)
{
if (!_stream.is_open ()) throw "²»ÄÜ´ò¿ªÎļþ";
};
long GetLong ();
double GetDouble ();
std::string GetString ();
bool GetBool ();
};
class Serializer
{
private:
std::ofstream _stream;
public:
Serializer (std::string const & nameFile)
: _stream (nameFile.c_str (), ios_base::out | ios_base::binary)
{
if (!_stream.is_open ()) throw "²»ÄÜ´ò¿ªÎļþ";
};
void PutLong (long l);
void PutString (std::string const & str);
void PutBool (bool b);
void PutDouble (double d);
};
============================================================================
#include "SerStream.h"
//DeSerializer³ÉÔ±º¯Êý
long DeSerializer::GetLong () {
long l;
if (_stream.eof()) throw "·ÇÕý³£Îļþ½áÊø";
_stream.read (reinterpret_cast<char *> (&l), sizeof (long));
if (_stream.bad()) throw "Îļþ¶ÁÈëʧ°Ü";
return l;
}
double DeSerializer::GetDouble () {
double d;
if (_stream.eof()) throw "·ÇÕý³£Îļþ½áÊø";
_stream.read (reinterpret_cast<char *> (&d), sizeof (double));
if (_stream.bad()) throw "Îļþ¶ÁÈëʧ°Ü";
return d;
}
std::string DeSerializer::GetString () {
long len = GetLong ();
std::string str;
str.resize (len);
_stream.read (&str [0], len);
if (_stream.bad()) throw "Îļþ¶ÁÈëʧ°Ü";
return str;
}
bool DeSerializer::GetBool () {
long b = GetLong ();
if (_stream.bad()) throw "Îļþ¶ÁÈëʧ°Ü";
if (b == TruePattern)
return true;
else if (b == FalsePattern)
return false;
else
throw "data corruption";
}
//Serializer³ÉÔ±º¯Êý
void Serializer::PutLong (long l) {
_stream.write (reinterpret_cast<char *> (&l), sizeof (long));
if (_stream.bad()) throw "ÎļþдÈëʧ°Ü";
}
void Serializer::PutDouble (double d) {
_stream.write (reinterpret_cast<char *> (&d), sizeof (double));
if (_stream.bad()) throw "ÎļþдÈëʧ°Ü";
}
void Serializer::PutString (std::string const & str) {
int len = str.length ();
PutLong (len);
_stream.write (str.data (), len);
if (_stream.bad()) throw "ÎļþдÈëʧ°Ü";
}
void Serializer::PutBool (bool b) {
long l = b? TruePattern: FalsePattern;
PutLong (l);
if (_stream.bad ()) throw "ÎļþдÈëʧ°Ü";
}
bilbo0214
2003-10-17
打赏
举报
回复
//抽象接口定义
#if !defined SERIAL_H
#define SERIAL_H
class Serializer;
class DeSerializer;
class Serializable
{
public:
virtual void Serialize (Serializer & out) const = 0;
virtual void DeSerialize (DeSerializer & in) = 0;
};
PHP
串行化
与JSON
简单来说,
串行化
即将变量转换成字节流的过程。
串行化
的提出,有效的解决了对象的保存和传输的
问题
,举例来说,我在JavaScript中建立了一个对象,我现在想将这个对象保存到服务器端的数据库中,那么我如何进行操作呢,这个时候往往就用到了对象的
串行化
。在JavaScript的
串行化
中不得不提JSON,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript Programming Language,
Standard
ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,
C++
, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
Visual
C++
2005入门经典--源代码及课后练习答案
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual
C++
2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual
C++
2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual
C++
2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 出版社:清华大学出版社 ISBN:9787302142713 上架时间:2007-2-12 出版日期:2007 年1月 开本:16开 页码:1046 版次:1-1 编辑推荐 本书由编程语言先驱者Ivor Horton倾力而著,是国内第一本全面、深入介绍Visual
C++
2005的经典之作! 内容简介 本书系编程语言先驱者Ivor Horton的经典之作,是学习
C++
编程最畅销的图书品种之一,不仅涵盖了Visual
C++
.NET编程知识,还全面介绍了标准
C++
语言和.NET
C++
/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual
C++
2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为
C++
高效程序员。... 作译者 Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的顾问及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、
C++
、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。Ivor Horton还著有Beginning Visual
C++
6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual
C++
2005编程 1 1.1 .NET Framework 1 1.2 CLR 2 1.3 编写
C++
应用程序 3 1.4 学习Windows编程 4 1.4.1 学习
C++
4 1.4.2
C++
标准 5 1.4.3 控制台应用程序 5 1.4.4 Windows编程概念 6 1.5 集成开发环境简介 7 1.6 使用IDE 9 1.6.1 工具栏选项 9 1.6.2 可停靠的工具栏 10 1.6.3 文档 11 1.6.4 项目和解决方案 11 1.6.5 设置Visual
C++
2005的选项 23 1.6.6 创建和执行Windows应用程序 24 1.6.7 创建Windows Forms应用程序 26 1.7 小结 29 第2章 数据、变量和计算 31 2.1
C++
程序结构 31 2.1.1 程序注释 36 2.1.2 #include指令——头文件 37 2.1.3 命名空间和using声明 37 2.1.4 main()函数 38 2.1.5 程序语句 38 2.1.6 空白 40 2.1.7 语句块 41 2.1.8 自动生成的控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2
C++
中的关键字 43 2.2.3 声明变量 44 2.2.4 变量的初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 46 2.3.3 整型修饰符 47 2.3.4 布尔类型 48 2.3.5 浮点类型 48 2.3.6 ISO/ANSI
C++
中的基本类型 49 2.3.7 字面值 50 2.3.8 定义数据类型的同义词 50 2.3.9 具有特定值集的变量 51 2.3.10 指定枚举常量的类型 52 2.4 基本的输入/输出操作 53 2.4.1 从键盘输入 53 2.4.2 到命令行的输出 53 2.4.3 格式化输出 54 2.4.4 转义序列 55 2.5
C++
中的计算 57 2.5.1 赋值语句 57 2.5.2 算术运算 58 2.5.3 计算余数 63 2.5.4 修改变量 63 2.5.5 增量和减量运算符 64 2.5.6 计算
C++
STLSTL实战开发精讲视频
《
C++
模板技术与 STL实战开发》主讲:丁宋涛 泛型编程(Generic Programming)是一种全新的程序设计思想,它和STL是现代
C++
的精髓。可以说,不会STL很难称得上掌握了现代
C++
编程。STL是一个高效的
C++
程序库,它被容纳于
C++
标准程序库(
C++
Standard
Library)中,该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大
C++
程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。
C++
Standard
Library简介
C++
Standard
Library是
C++
语言标准库,由
C++
官方提供并定义了一系列标准的类型、函数和模板(包括输入/输出、字符串处理、数学计算、容器、算法等)。
C++
Standard
Library是
C++
语言的基础,并且是所有
C++
开发人员都应该掌握的知识点。 对于
C++
Standard
Library的开源项目框架,网上有很多资源可以参考,比如:
【转】PHP
串行化
与JSON
总目录
What 、Why、How
What
Why
How
PHP
串行化
语法
PHP
串行化
实例
在JavaScript中
串行化
为JSON—使用json2.js
在JavaScript中
串行化
为JSON—使用prototype.js
PHP与JSON
json_decode函数
json_enc
C++ 语言
64,639
社区成员
250,578
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章