我有多頭long[]
的許多陣列,我需要序列化它們,並將它們保存到磁盤供以後閱讀,注意到,每個陣列必須進行修改不時,但讀取頻繁時寫入次數不多。 通常我的應用程序只需要少量那些同時加載到內存中的應用程序。 在將數組存儲回磁盤之前,對每個數組的編輯可以在內存中進行批量處理。每個陣列都有數百個至上百萬個元素。 在我的應用程序中,將所需數組加載到內存中非常關鍵。最緊湊的方式來序列化的long數組在Java中
在我的情況下,每個數組中的長整數平均而言非常接近另一個,即從一個值到另一個值的差值(如果在單個數組內排序)小於整數。
採用字典樹狀結構as presented here似乎不適用於我的情況下,由於在溶液中的陣列值是已知的,並永遠不會改變的溶液。
This solution here告訴我使用ByteBuffer
和LongBuffer
加快I/O,但我的想法是這樣的陣列也存儲在最緊湊的方式,以便來加速通過將其加載到主存儲器所需的時間減少我需要閱讀的大小。 直覺就是存儲排序後的值,並存儲一個值與下一個值之間的差值,平均值在整數範圍內,因此佔用的空間較小。 但是,由於這並非總是如此,我仍然無法將所有的值存儲爲整數,所以這個方向似乎並不樂觀。 我錯過了一些明顯的東西嗎?
什麼是最有效的方式,在I/O時間,來實現這一目標?
編輯一般來說,對於性能完全I/O時間,在不考慮磁盤空間,this question有更好的答案。
你做了多少內存處理?您可以從左側的字段中考慮映射到「LongBuffer」的MappedByteBuffer,除了您實際訪問的元素外,它完全消除了I/O。 – EJP
@EJP我不明白你的問題和你的建議。你能澄清它嗎?謝謝。 – Kuzeko
我的問題是'你在做多少內存處理?'。你不瞭解哪一部分?我的建議是使用直接由磁盤文件支持的虛擬長陣列。根據你對數據做多少計算,這將工作或不能快速工作。 – EJP