日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++实现对象序列化和反序列化(读写二进制文件)操作

發布時間:2025/3/15 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++实现对象序列化和反序列化(读写二进制文件)操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相關函數介紹

在我們的C語言中讀寫二進制文件一般使用的fread、fwrite全局函數,當然也可以使用更底層的read和write函數。在我們的C++中 通過ofstream 和 ifstream 對象 讀寫文件更加的方便了。對二進制文件的讀寫 主要使用?ofstream::write,ifstream::read函數。如果對文件讀寫方向感不強,記不住的 ,記住4個字就行了。讀入寫出。這個4個字是針對 程序或者說是內存!往內存里面讀數據 -> read ,往磁盤里面寫數據->write。這樣永遠就會忘了。還有一些其他的函數,都比較簡單。感覺用起來很方便。

這里普及下序列化和反序列化

序列化: 將數據結構或對象轉換成二進制串的過程。
反序列化:將在序列化過程中所生成的二進制串轉換成數據結構或者對象的過程。

下面就用相關函數實現普通的字符文件操作 和 二進制文件操作。代碼注釋很詳細

普通文件操作

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <fstream> using namespace std;//寫文件 void WriteFile() {ofstream file("./text.txt",ios::out);if (!file.is_open()){cout << "文件打開失敗" << endl;return;}file << "姓名:laymond" << endl;file << "年齡:18" << endl;file.close();return; } //讀文件 void ReadFile() {ifstream file("./text.txt", ios::in);if (!file.is_open()){cout << "文件打開失敗" << endl;return;}char temp[1024] = { 0 };//讀取文件3種方式//1、read file.eof() 作為判斷條件 會慢一拍while (file >> temp)//while (!file.eof()){//file.read(temp, 1024); //這樣會讀取到\n//cout << temp// >>按行讀取,不會讀換行符cout << temp << endl;}//2、get 一個一個字符的讀取//char c;//while ( (c=file.get()) != EOF )//{// cout << c;//}//3、一行一樣讀取 getline 會把\n 舍棄掉....//while (file.getline(temp,1024))//{// cout << temp << endl;//}file.close(); }

?

二進制文件操作(序列化和反序列化)

?

接上面代碼哈,是寫在同一個文件中的。

class Person { public:Person(char* name, int age){strcpy(this->name, name);this->age = age;}void showInfo(){cout << name << " " << age << endl;} public:char name[10]{ 0 };int age = 0; }; //二進制文件 進行寫 void WriteBinaryFile() {ofstream file("./binary.txt",ios::out | ios::binary );if (!file.is_open()){cout << "文件打開失敗" << endl;}Person p1("Lay1", 11);Person p2("Lay2", 2);Person p3("Lay3", 151);Person p4("Lay4", 5);Person p5("Lay5", 9);file.write((char*)&p1, sizeof(p1));file.write((char*)&p2, sizeof(p2));file.write((char*)&p3, sizeof(p3));file.write((char*)&p4, sizeof(p4));file.write((char*)&p5, sizeof(p5));file.close(); } //二進制文件 進行讀 void ReadBinaryFile() {ifstream file("./binary.txt", ios::in | ios::binary);if (!file.is_open()){cout << "文件打開失敗" << endl;}//開辟一塊空間 存放讀取的數據char* temp = new char[sizeof(Person)];//或者 Person p;開辟的空間肯定合適//將數據讀入的 temp對應的空間while (file.read(temp,sizeof(Person))){Person p = *(Person*)(temp);p.showInfo();}file.close(); }int main(int argc, char *argv[]) {//讀寫 字符文件//WriteFile();//ReadFile();//讀寫 二進制文件//WriteBinaryFile();ReadBinaryFile();return EXIT_SUCCESS; }

運行結果驗證

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的C++实现对象序列化和反序列化(读写二进制文件)操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。