我有一個物件陣列,其中物件是一個類的實體。我想將這個陣列保存到一個檔案中,這樣我就可以將檔案讀回陣列,并且物件及其實體變數值將與保存之前一樣。有人知道這是如何實作的嗎?
我想保存到檔案中的類實體物件相當復雜,其中包含數十個實體變數,這些實體變數本身通常是其他類實體變數。
我試過的:
根據這篇文章,我嘗試了以下操作:
試驗 1:
保存存檔:
require 'pp'
$stdout = File.open('path/to/file.txt', 'w')
pp myArray
加載檔案:
require 'rubygems'
require 'json'
buffer = File.open('path/to/file.txt', 'r').read
myArray = JSON.parse(buffer)
但我得到了一個 JSON::ParserError
試驗2:
保存存檔
serialized_array = Marshal.dump(myArray)
File.open('./myArray.txt', 'w') {|f| f.write(serialized_array) }
收到 Encoding::UndefinedConversionError
uj5u.com熱心網友回復:
TRIAL1 不起作用,因為pp“以漂亮的形式列印引數”,而這不一定是 JSON。
TRIAL2 可能無法正常作業,因為Marshal生成二進制資料(不是文本)并且您沒有以二進制模式處理檔案,這可能會導致編碼和 EOL 問題。此外,Marshal這不是一種很好的持久性格式,因為該格式與您使用的 Ruby 版本相關聯。
修改 TRIAL1 以撰寫 JSON 可能是目前最好的解決方案:
require 'json'
File.open('path/to/file.json', 'w') { |f| JSON.dump(myArray, f) }
uj5u.com熱心網友回復:
終于找到了一個有效的解決方案!
dump = Marshal.dump(myArray)
File.write('./myarray', myArray, mode: 'r b')
dump = File.read('./myarray')
user = Marshal.restore(dump)
將編碼更改為二進制模式后,馬歇爾能夠做到這一點
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/347887.html
