簡體   English   中英

序列化與 toString()

[英]Serialization vs toString()

由於我正在寫入/讀取文件,我想知道直接發送對象或將它們的表示形式用作文件上的字符串之間是否有任何區別或最佳實踐,在我的情況下,我個人認為它更容易處理。

那么我什么時候應該序列化而不是將對象作為字符串寫入/讀取?

object 的字符串表示形式中通常沒有足夠的信息用於重新創建它。

Java 序列化“有效”,但不會為您提供人類可讀的表示形式,如果您正在尋找的話。

另一種選擇是讀取/寫入對象的 JSON 表示。 Java的JSON序列化/聯邦化庫有幾個比較流行,包括GSon和Jackson。

答案在Object.toString()javadoc中。

返回 object 的字符串表示形式。通常,toString 方法返回一個“文本表示”此 object 的字符串。結果應該是簡潔但信息豐富的表示形式,易於人們閱讀。

請注意,它說:

  • 簡潔的,
  • 翔實的,和
  • 便於一個人閱讀。

但它沒有說:

  • 完全的,
  • 明確的,或
  • 方便電腦閱讀。

序列化是關於生成一個線性(不一定是文本)形式,可以被計算機讀取並用於重建原始 object 的 state。

因此,典型的序列化不是特別適合人類閱讀(例如 JSON、XML、YAML)或完全不可讀(例如 Java Object 序列化,ASN.1)。 但不利的一面是,重建 object 所需的信息都應該以明確的形式存在。

(關於各種序列化、它們的屬性和效用,還有很多可以說的。但是,它超出了您問題的 scope。)


這是否會阻止toString()用於序列化數據?

不,它沒有。

但如果采用這種方法,則需要仔細編寫toString()方法的代碼,以確保它們生成的內容完整且明確。 然后你需要寫一個相應的方法來解析toString() output 並從中創建一個新的 object 。


...或將它們的表示形式用作文件上的字符串,就我個人而言,我個人認為它更容易處理。

我認為,當您編寫更大、更復雜的程序時,您將進入這樣一個階段:編寫、測試和維護此類代碼既乏味又耗時。

序列化允許您將 object 的 state 轉換為 stream 字節,然后可以將其保存到本地磁盤上的文件,通過網絡發送到任何其他機器,或保存到數據庫。 反序列化允許您反轉過程,這意味着將序列化字節 stream 重新轉換為 object。 重要的是要知道數字或其他類型不像字符串那樣容易寫入文件或處理。 但是,不保證它們的初始狀態在不被序列化的情況下保持不變。

因此,對於更簡單的情況,序列化不一定很重要,例如大學項目,使用字符串很方便。 但是,不建議進行此過程,因為還有其他更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM