2013-10-31 53 views
0

數組在我的應用程序最簡單的方法,我需要序列化自定義集合類型的數組:序列化列表中的Java

IntList[] collections; // need to be serialized 

由於我們使用的編碼環境的性質,我不能依靠第三方或任何Java內置包進行序列化,並且必須自己完成。

我想出的最好的方法是將它全部存儲在一個大的字節數組中,在序列化之前對每個元素的長度進行編碼。

例如,對於集合數組,看起來像這樣:

| 0 | (1, 6, 3, 7) 
| 1 | (7, 2, 4, 6) 
| 2 | (1) 

將被序列化爲:

4 (length of collection at 0) followed by the elements 
4 (length of collection at 1) followed by the elements 
1 (length of collection at 2) followed by the elements 

是否有將優化所需的序列化數據的大小是更好的選擇?

+1

決定你的想法。你想要最簡單還是最小? – EJP

+0

尺寸最小的是我們需要的解決方案 –

+0

我必須缺少什麼? CSV的問題是這樣的格式:index,sizeOfCollection,x1,x2,x3 ... newline等等,用於數組中的每個條目?你在問一些人類可讀的東西嗎?爲什麼你需要對數據進行非規範化處理,當你列出所有元素時,確實需要添加長度? –

回答

1

如果規模效益是目標,然後做兩件事情:

  1. 用你寫一個大小值,然後實際的價值體系。
  2. 將結果在一個GZipOutputStream

比較兩個,如果壓縮的版本要小(超過約100值或因此這將是更小的),那麼你可以使用該版本。

當對數據進行反序列化時,您可以嘗試對數據流進行解壓縮,如果數據無效,那麼就假設它不是壓縮版本(將解壓縮放在try/catch塊中,解壓縮爲解壓縮抓方)。

1

我看到了兩個可能的解決方案......

1)使用CSV風格類似指數,sizeOfCollection,X1,X2,X3 ...換行等對陣列中的每個條目。

2)這個想法不那麼簡單,但至少你會使用一種不是你編造的奇怪的格式。這不是一個很好的做法。

編寫一個簡單的JSON解析器。輸出內容如下...

[ 
    { 
     "index": 0, 
     "size": 4, 
     "values": [ 
      1, 
      6, 
      3, 
      7 
     ] 
    }, 
    { 
     "index": 1, 
     "size": 4, 
     "values": [ 
      7, 
      2, 
      4, 
      6 
     ] 
    }, 
    { 
     "index": 2, 
     "size": 1, 
     "values": [ 
      1 
     ] 
    } 
] 

再次警惕非規範化,不知道爲什麼你真的需要在序列化中的索引和大小?