2014-10-05 70 views
0

我剛剛開始使用Java中的套接字編寫網絡代碼。我只是在製作一些測試程序。本來我打算髮送數據作爲逗號分隔值,但我最近發現了ObjectOutputStream。哪種方法會更快或更高帶寬效率?例如,如果我製作的遊戲必須經常發送x和y座標,我應該通過PrintWriter將其通過逗號分隔,或者創建一個Position類並通過ObjectOutputStream發送實例。如果我更改我的代碼並需要發送更多數據,該怎麼辦?Java Socket編程:將對象作爲CSV或序列化對象發送?

通過PrintWriter將數據發送爲CSV格式與使用ObjectOutputStream對象中的字段發送數據有什麼優缺點?

回答

2

ad-hoc二進制格式很有可能比默認的序列化格式更具帶寬效率,這應該是(但這是一個瘋狂的猜測,它取決於數據的性質和數量:你應該測量如果它很重要)或多或少的帶寬效率比基於文本的格式。

但帶寬效率並不是唯一重要的事情。

使用序列化,客戶端和服務器必須用Java編寫,並且在他們的類路徑中具有序列化對象的類。如果你打算讓客戶用任何語言書寫,你就不應該考慮它。

如果序列化正常,將幾乎任何Java對象轉換爲字節當然是一種非常簡單的方法,這可以避免定義格式。

請注意,有一些替代品可提供幾乎相同的靈活性,但不具有序列化的僅Java缺點。例如,JSON,XML或protobuf

0

我認爲CSV更小。

如果你想檢查數據大小,請嘗試輸出到文件。

我不推薦ObjectOutputStream給你,由於其他原因。

因爲你必須保持對象的兼容性。

你研究過關於serialize和serialVersionUID嗎?

請檢查java.io.Serializable