2014-03-24 119 views
2

允許supose我定義一個類Java。序列化的陣列

public class PointFloat { 
float x; 
float y; 
} 

然後我實例的陣列

PointFloat[] points = new PointFloat[10]; 

此時我具有10個PointFloat對象陣列。讓我們假設一些代碼爲每個點浮點賦值x和y。 我需要的是將數組存儲在Mysql數據庫的VARBINARY中。

爲了實現這一點,我需要將這個PointFloats數組轉換爲byte [],以便我可以使用PreparedStatement將數據插入數據庫 對於我來說,使用PreparedStatement並不是新事物,而是第一次使用對象序列化。

你如何轉換成任何大小的PointFloat陣列來一個byte []? 請保持儘可能簡單。

非常感謝您的閱讀。

+1

這是絕對必要的嗎?將分數存儲在自己的表中顯然會更好... –

+0

好吧。這是第一個想法。但是這需要額外的查詢。想象一下,選擇1000個記錄每個人的點數。然後迭代這些記錄以從DB中選擇點。是。有可能的。但是如果你可以存儲記錄本身的點更有效率。 – mdev

+1

我不同意。如果他們在數據庫中,您可以查詢所需的點。您可以刪除_individual_ points並添加_individual_ points。如果你把全部內容都拼湊成一個龐大的'BLOB',那麼編輯的唯一方法就是加載**全部**。如果你可以改變數據庫模式,那每次都是一個勝利。 –

回答

2

你可以簡單地使用ObjectOutputStream你的陣列寫入一個ByteArrayOutputStream。看到這個答案的細節和例子:https://stackoverflow.com/a/2836659/337621

因爲你的對象包含兩個浮筒,標準系列化完全適合您的需求。

+1

我還沒有決定如果我要爲點放置表,序列化字節[]或JSON。但是這篇文章是回答Made的具體問題的文章。非常感謝您的信息。 – mdev

+0

不客氣。 –

2

在這一點上我有十個PointFloat對象的數組

號在這一點上,你有10個空引用數組。

選擇如何將點轉換爲字節數組。例如,您可以設計自定義表示,或者使用Java序列化,或者JSON或XML。

我會選擇一個格式,可讀無論語言,併爲您更改Point類(所以不是本地Java序列化),這將不會是不可讀儘快。 JSON非常緊湊(用於基於文本的表示)。每種語言都有幾十個JSON序列化器。他們都記錄在案。

+0

是的。你對空引用是正確的。我錯過了那一個:)。我做了一個JSON解析器和序列化器。 (我的目的是爲了避免導入越來越多的罐子到項目中)。我正在考慮序列化爲Json。 – mdev

+0

@mdev你製作了一個JSON串行器?基督,你真的瘋了。你也實施了SSL嗎?只有一個問題 - 如何以比導入jar更好的方式實現你自己的(當然更少的測試)代碼? –

+0

不只是JSON。 SSL由Apache開發人員完成。而且,因爲JSON很容易解析(我們不能說XML相同)。它從FB和G +中獲取了良好的parsin JSON用戶數據。當然,它確實很好的序列化。從來沒有jscript抱怨生成的JSON。是。我有點瘋狂。但是,製作緊湊型項目的努力已經付諸實施。 – mdev