淺談序列化及文本格式

序列化及文本格式

需求背景

軟件項目在開發過程中,將大量初始化配置項在一定程度上保存在配置文件中。肯定有很多人有疑問,為什么不將這些信息放在軟件內存中。開機時與用戶交互進行確認?這肯定是一個好想法,但是如果配置太多或者太復雜就不是一個好主意了。我所在的行業,配置需要專門的人員進行管理,并花費大量時間調試配置。這里僅僅是討論一下配置的兩種方式,序列化和文本格式的配置文件的優劣,其他的配置文件方式暫時不過多敘述。

配置文件之序列化文本

在業界中,序列化文本常用兩種,json和xml文件。當有內存數據需要保存時,只需要調用程序提供的序列化接口直接一步到位將其序列化成流數據保存在文件中。軟件需要讀取這些數據時,只需要將其反序列化并可以獲取一個指定結構的對象。這種方法非常方便快捷。(序列化還有一個用到的地方就是傳輸,發送編碼時需要將對象序列化成字節流,接收解碼時將字節流反序列化成對象)

配置文件之普通文本

另外一種常用的配置就是文本,比如常用的ini或者txt文件。保存方法就是Open一個文本對象(設定模式),然后將內存對象調用C++庫函數將文本一行一行的Write進文本對象中(切記不是使用With包裹對象時,使用完之后,需要close對象,否則長時間會造成句柄溢出),讀取時重復上述操作,這個過程通常也是按照一行一行的讀取。

兩者比較

首先說下普通文本。對于本人來說,第一次接觸的是這種方式來和配置交互。這種對于初學者是很友好的,但是后來學習了序列化和反序列化之后,發現這種方式太繁瑣。比如,自己定義的一個對象有幾十個屬性,使用普通文本方法時,需要一行一行手動寫,再一行一行的讀取,代碼冗余不堪。使用序列化這個問題基本不存在,一行代碼就能搞定。但是代價也是有的,一旦文本和內存中定義的對象不一致時,常常就會報錯。json還好些,滿足規定格式就能過去,xml的這種,文本中有某種屬性,但是內存定義的類中沒有這種對象時,程序能立馬死給你看。在項目升級過程中,這種很是常見。比如該軟件在n年前配合xml部署了一次,現在要對這個項目進行升級。軟件已經迭代了n多次,類肯定頻繁的修改。假如配置只有這一個類,很方便的查找不同并修改。現實時配置文件十來個,每個的類有十來個。有點沒有改變,有的變化了結構,有點變化了內容含義。有任何一項配置沒有按照新版軟件來進行適應修改,那么軟件就會升級失敗。現實中,修改配置的時間一般很短,就會導致各種升級失敗,也就是常說的版本不兼容。txt倒是不存在這個問題,之前的存在就讀取,不存在就做默認值。軟件啟動不會因此拋異常。
總體來說,文本文件對人員更加直觀,錯了很容易手動修改(也很容易改錯),也有很強的兼容性。半結構化的數據對內存對象更加友好,序列化和反序列化時很方便,但是兼容性并不如普通文本。還有一種常用的配置文件比如bin,這種完全是人類不可閱讀的,其目的就是杜絕人手動修改,比較有意思的是有些配置文件以數據庫文件的方法來設置,這種就是完全方便人手動修改,這種方法可以對配置文件設置密碼,可以避免無關人員修改。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41851.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41851.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41851.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

眾所周知沃爾瑪1P是怎么運營?

??沃爾瑪的1P模式,即第一方供應商模式,是其獨特的采購策略。在這種模式下,供應商先將商品賣給沃爾瑪,由沃爾瑪負責庫存管理和銷售。沃爾瑪通過強大的采購和物流能力控制庫存,確保商品品質,為客戶提供更加…

FPGA問題

fpga 問題 第一道坎,安裝軟件;沒有注冊,無法產生sop文件,無法下載 沒有相應的庫的quartus ii版本,需要另下載 第二道坎,模擬器的下載,安裝; 第三道,verilog 語法&#x…

deepspeed huggingface傳入參數 optimizer和lr_scheduler測試

Trainer中 首先: WarmupDecayLR --lr_scheduler_type linear WarmupLR --lr_scheduler_type constant_with_warmup 1 TrainArgument不傳lr_scheduler_type、optim,warmup_steps15 ds config文件中定義如下: 注意:如果不在Trai…

LangChain(四)工具調用的底層原理!給大模型按上雙手吧!(新手向)

背景 經過前面三篇的內容,我想大家對于大模型的構建、Langchain的優勢、Chain的構建有了相當程度的理解(雖然只是最簡單的示例,但是足夠有代表性)。 后續Chain的使用將會更加豐富多彩,您會了解Langchain開發的大模型…

14-31 劍和詩人5 - 使用 AirLLM 和分層推理在單個 4GB GPU 上運行 LLama 3 70B

利用分層推理實現大模型語言(LLM) 大型語言模型 (LLM) 領域最近取得了顯著進展,LLaMa 3 70B 等模型突破了之前認為可能實現的極限。然而,這些模型的龐大規模給其部署和實際使用帶來了巨大挑戰,尤其是在資源受限的設備上,例如內存…

怎么壓縮pdf文件的大小?減小PDF文件大小的四種方法

怎么壓縮pdf文件的大小?文件大小不僅影響傳輸速度,還可能涉及存儲空間的管理。當處理大型PDF文件時,可能會面臨電子郵件附件限制或云存儲容量不足的問題。此外,過大的文件在瀏覽和加載時也會導致延遲,影響閱讀體驗。這…

3款自己電腦就可以運行AI LLM的項目

AnythingLLM、LocalGPT和PrivateGPT都是與大語言模型(LLM)相關的項目,它們允許用戶在本地環境中與文檔進行交互,但它們在實現方式和特點上存在一些差異。AnythingLLM使用Pinecone和ChromaDB來處理矢量嵌入,并使用OpenA…

【C語言】return 關鍵字詳解

在C語言中,return是一個關鍵字,用于從函數中返回值或者結束函數的執行。它是函數的重要組成部分,負責將函數的計算結果返回給調用者,并可以提前終止函數的執行。 主要用途和原理: 返回值給調用者: 當函數執…

mysql數據庫創建用戶并授權某個庫的所有權限

這個就直接上語句吧!只是注意要用管理員帳號執行,比如root去執行。 -- 創建新用戶(替換new_user為您的用戶名,password為您的密碼) CREATE USER new_user% IDENTIFIED BY password; -- 授予權限(替換data…

社交媒體數據分析:賦能企業營銷策略的利器

在這個數字化時代,社交媒體不僅是品牌與消費者互動的舞臺,更是企業洞察市場趨勢、優化營銷策略的金礦。本文將探討如何利用社交媒體數據分析賦能企業營銷,通過實戰案例與技巧分享,揭示這把“利器”如何幫助企業精準定位目標受眾、…

【論文閱讀】-- Visual Traffic Jam Analysis Based on Trajectory Data

基于軌跡數據的可視化交通擁堵分析 摘要1 引言2 相關工作2.1 交通事件檢測2.2 交通可視化2.3 傳播圖可視化 3 概述3.1 設計要求3.2 輸入數據說明3.3 交通擁堵數據模型3.4 工作流程 4 預處理4.1 路網處理4.2 GPS數據清理4.3 地圖匹配4.4 道路速度計算4.5 交通擁堵檢測4.6 傳播圖…

架構面試-場景題-單點登錄(SSO)怎么實現的

文章目錄 概述基于Cookie基于Token(OAuth, JWT)集中式認證服務 (CAS, SAML)分布式Session:輕型目錄訪問協議(LDAP)OAuth 2.0/OIDCKerberos 概述 單點登錄(Single Sign-On,簡稱SSO)是一種身份驗證機制,允許…

掌握【Python異常處理】:打造健壯代碼的現代編程指南

目錄 ?編輯 1. 什么是異常? 知識點 示例 小李的理解 2. 常見的內置異常類型 知識點 示例 小李的理解 3. 異常機制的意義 知識點 示例 小李的理解 4. 如何處理異常 知識點 示例 小李的理解 5. 拋出異常 知識點 示例 小李的理解 6. Python內置…

Springboot整合Jsch-Sftp

背景 開發一個基于jsch的sftp工具類&#xff0c;方便在以后的項目中使用。寫代碼的過程記錄下來&#xff0c;作為備忘錄。。。 Maven依賴 springboot依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par…

codeforces 1633A

文章目錄 1. 題目鏈接2. 題目代碼正確代碼錯誤代碼 3. 題目總結 1. 題目鏈接 Div. 7 2. 題目代碼 正確代碼 #include<iostream> using namespace std; int main(){int testCase;cin >> testCase;while(testCase --){int ingeter;cin >> ingeter;if(!(inget…

SpringBoot彩蛋之定制啟動畫面

寫在前面 在日常開發中&#xff0c;我們經常會看到各種各樣的啟動畫面。例如以下幾種 ① spring項目啟動畫面 ② mybatisplus啟動畫面 ③若依項目啟動畫面 還有很多各式各樣好看的啟動畫面&#xff0c;那么怎么定制這些啟動畫面呢&#xff1f; 一、小試牛刀 ① 新建一個Spr…

Java 8 到 Java 22 新特性詳解

Java 8 到 Java 22 新特性詳解 Java自發布以來一直在不斷演進&#xff0c;添加新特性以提升開發效率和性能。本文將介紹Java 8到Java 22的主要新特性&#xff0c;幫助開發者了解各版本的新功能和改進。 Java 8 (2014) 1. Lambda 表達式 Lambda 表達式允許使用簡潔的語法定義…

SQL 之 concat_ws和concat的區別

concat_ws和concat都是用于連接字符串的函數&#xff0c;但它們在使用上有一些區別&#xff1a; 一、concat、concat_ws函數格式&#xff1a; concat格式&#xff1a; concat&#xff08;參數1,參數2,…參數n&#xff09;&#xff0c;如果要加’分隔符’直接寫在 各參數中間就…

關于微信支付-商戶平臺:查詢訂單提示“查詢失敗:操作失敗,請稍候重試”的分析

目錄 引子 分析 應對 小結 引子 在開發和實施微信 JSAPI 支付的應用后&#xff0c;我們遇到了一些問題&#xff0c;訂單的狀態更新不正常&#xff0c;當然我們首先需要從自身尋找原因和完善解決問題的辦法和方案。在支付的過程中&#xff0c;客戶會給我們一些反饋&#xf…

Open-Sora1.2環境搭建推理測試

引子 前陣子寫了一篇Open-Sora1.0環境搭建&推理測試&#xff08;Open-Sora1.0環境搭建&推理測試_自己搭建sora服務-CSDN博客&#xff0c;感興趣的童鞋&#xff0c;請移步&#xff09;。Open-Sora1.1發布的時候&#xff0c;撇了一眼新聞。后面一轉頭&#xff0c;忘記這…