文件序列化

1、概念-将数据以二进制流的方式依次写入到文件或者从文件中读取的过程

2、相关类

  CArchive类 -完成具体的数据读写(可代替CFile类的Read/Write函数)

  CArchive( CFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL );

    pFile:指向文件对象的指针,该文件对象是持久数据的最终来源或目的地;

    nMode:指定对象是被用来加载的还是用来保存的标志,包括:

      CArchive::load  --从存档对象中装载数据,要求CFile对象具有读取访问许可;

      CArchive::store  --将数据保存到存档对象中,要求CFile对象具有写入访问许可;

      CArchive::bNoFlushOnDelete  --禁止存档对象析构时自动调用存档对象的Flush操作;如果设置了此标志,在存档对象析构前必须显式地调用Close函数,否则数据将被破坏;

    nBufSize:指定内部文件缓冲区的大小,以字节为单位;默认的缓冲区大小是4096字节;

    lpBuf:可选指针,指向用户提供的大小为nBufSize的缓冲区;如果指定了这个参数,就要手工释放这块缓冲区;如果未指定这个参数,存档对象将从应用程序的局部堆中分配一块缓冲区,且该对象销毁时将释放这块内存;

3、使用

  1)创建或者打开文件

    CFile::Open

  2)文件读写

    构造CArchive对象

    数据读写

      >> 读操作

      << 写操作

    关闭CArchive对象

      CArchive::Close

  3)关闭文件

    CFile::Close

  注意:1、文件与CArchive的模式要一致:

      CFile::modeWrite<-->CArchive::store

      CFile::modeRead<-->CArchive::load

   2、数据读写的顺序要一致

例:

/***写操作***/

//构造CFile文件对象
CFile file;
file.Open("1.txt", CFile::modeCreate | CFile::modeWrite);
//构造存档对象
CArchive ar(&file, CArchive::store);
int i = 4;
char ch = ‘a‘;
float f = 1.3f;
CString str = "hello world!";
//保存数据
ar << i << ch << f << str;
ar.Close();
file.Close()
/***读操作***/

//构造CFile文件对象
CFile file;
file.Open("1.txt", CFile::modeRead);
//构造存档对象
CArchive ar(&file, CArchive::load);
int i;
char ch;
float f;
CString str;
CString strResult;
//读取数据
ar >> i >> ch >> f >> str;
ar.Close();
file.Close();
strResult.Format("%d,%c,%f,%s", i, ch, f, str);
MessageBox(strResult);
时间: 2024-08-26 03:03:04

文件序列化的相关文章

android XML文件序列化

XML 在Android中应用的相当多啊,所以掌握一些XML的序列化及解析还是很有必要的. XmlSerializer serializer = Xml.newSerializer();        //生成一个XML 序列化器 File file = new File(Environment.getExternalStorageDirectory(),"backup.xml"); FileOutputStream fos = new FileOutputStream(file);

Java中对文件的序列化和反序列化

public class ObjectSaver { public static void main(String[] args) throws Exception { /*其中的 D:\\objectFile.obj 表示存放序列化对象的文件*/ //序列化对象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("c:\\test\\objectFile.obj")); Customer cust

文件I/O:文件流→序列化

★文件流 文件操作是最简单最直接也是最容易想到的一种方式,我们说的文件操作不仅仅是通过FileInputStream/FileOutputStream这么"裸"的方式直接把数据写入到本地文件(像我以前写的一个扫雷的小游戏JavaMine就是这样保存一局的状态的),这样就比较"底层"了. 主要类与方法和描述 1. FileInputStream.read() //从本地文件读取二进制格式的数据 2. FileReader.read() //从本地文件读取字符(文本)数

Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

Java对象的序列化

1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 3.对象序列化 3.1序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中.只有实现了Serial

简析C++序列化

 1.什么是程序的序列化?  我们编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯.这个将程序数据转化成能被存储并传输的格式的过程被称为"序列化"(Serialization),而它的逆过程则可被称为"反序列化"(Deserialization). C++程序的序列化就是将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存

程序猿浅谈JAVA的序列化

序列化,是我们在开发过程中经常会碰到的问题.经常会看到一个类(Class)实现Serializable接口.这里就是实现序列化. 今天小编就来聊聊什么是序列化. Java是面向对象编程,对象保存了一个类的完整的数据.但是Java有自己专门的垃圾回收机制,当一个对象不再被使用,就会被回收,释放空间.如果我们想长久地保存一个对象的数据该怎么办呢?这个时候就用到序列化了. 序列化就是将对象的状态信息转换为可以存储或者传输的过程.在序列化期间,对象将其当前的状态写入到临时或者持久性存储区.以后可以通过从

Java 对象流(输入-输出)objectoutputstream序列化报错

报错:java.io.notserializableexception 解决方法:添加下面代码实现 对象类 1 package com.etc._07ObjectDemo; 2 3 import java.io.Serializable; 4 5 public class Person implements Serializable { 6 private int id; 7 private String name; 8 private String sex; 9 public int getI

javad对象序列化(转)

java对象序列化 当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再恢复为Java对象. 只能将支持 java.io.Serializable 接口的对象写入流中.每个 serializable 对象的类都被编码,编码内容包括类名和类签名.对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包. 1.概念 序列化:把Java对象转换为字节