我有一個大的數據結構,我是serializing.At某些時候我需要編輯在數據structure.But值只是改變一個很小的值我將不得不再次重新序列化,而不是更新在文件中更改的值。我聽說過Google protocol buffer's。請問使用它解決了我重寫文件的問題?對我來說,使用協議緩衝區而不是Java序列化是更好的選擇嗎?協議緩衝區比序列化更好嗎?
4
A
回答
3
如果您關心性能,請勿爲您的數據使用文本格式。如果你想在沒有反序列化的情況下修改數據,你需要使用固定的記錄數據格式。你可能不得不手動發明這個。然後在文件中尋找正確的位置並重寫剛剛更改的字段。您可以查看DataOutputStream
以開始使用,或者使用數據庫(如HSQLDB
)來存儲和編輯您的數據。
更多這方面的思考,除非你的對象是很簡單的,我覺得一個數據庫將是一個更好的路要走。
上DataOutputStream聯合更多信息: http://download.oracle.com/javase/tutorial/essential/io/datastreams.html
的Java數據庫: http://java-source.net/open-source/database-engines
5
協議緩衝區本身是一個序列化格式,所以他們不會從根本上改變畫面(你仍然需要重新連載您更改值後)。
谷歌的文檔聲稱,協議緩衝區是更緊湊,速度比XML(這似乎是合理)來分析;不知道它們與原生Java序列化的比較。協議緩衝區的
優勢可能是便攜性(如果其他語言編寫的程序需要讀取文件)和可升級性(你可以不破壞文件格式的數據結構增加新的字段)。
1
您需要,可以直接例如XML或JSON修改的序列化格式。谷歌協議緩衝區是一個二進制格式 - 作爲Java序列化 - 因此不能直接修改...
4
幾個點
- 的沒有爲Protocol Buffers的二進制格式的編輯(http://code.google.com/p/protobufeditor/ )
- 協議緩衝區有一個文本格式,看起來像:
# Textual representation of a protocol buffer. # This is *not* the binary format used on the wire. person { name: "John Doe" email: "[email protected]" }
參見:
- 討論:http://groups.google.com/group/protobuf/browse_thread/thread/04fc478088137bf3
- 類:http://code.google.com/apis/protocolbuffers/docs/reference/java/com/google/protobuf/TextForm
說了這麼多,除非以下情況之一適用
-
我會用技術(JSON,XML等)已在使用
- 您需要協議緩衝區的性能
- 您已經/計劃使用協議緩衝區
相關問題
- 1. Java協議緩衝區Ascii序列化
- 2. 序列化/反序列化協議緩衝區
- 3. 協議緩衝區序列化C + +和反序列化C#類
- 4. 協議緩衝區
- 5. Java序列與協議緩衝區
- 6. 協議緩衝區精簡版與常規協議緩衝區
- 7. 谷歌協議緩衝區比較
- 8. 可視化gRPC和協議緩衝區
- 9. 協議緩衝區的Java,序列化有場
- 10. 協議緩衝區的ASCII安全序列化
- 11. 是適用於長期序列化的協議緩衝區?
- 12. 使用Google協議緩衝區多次反序列化消息
- 13. C++谷歌協議緩衝區:序列化爲char *?
- 14. 使用協議緩衝區(.NET)序列化哈希表
- 15. Google協議緩衝區反序列化類型
- 16. 將協議緩衝區序列化爲XML?
- 17. 協議緩衝區序列化到數據包中
- 18. 協議緩衝區反序列化和動態加載的DLL
- 19. 擴展協議緩衝區
- 20. gson vs協議緩衝區
- 21. 協議緩衝區記錄
- 22. 協議緩衝區錯誤
- 23. 協議緩衝區挑戰
- 24. 谷歌協議緩衝區
- 25. Android和協議緩衝區
- 26. JPA協議緩衝區
- 27. Delphi協議緩衝區?
- 28. 谷歌協議緩衝區 -
- 29. 協議緩衝區和Hadoop
- 30. 協議緩衝區文件?
你可以給一個代碼示例。 – Emil 2010-10-16 07:13:16