2009-10-03 15 views
1

我有,我會在我的J2ME應用程序中使用,從資源文件中讀取它的一些1000密鑰對的值。但是,我將在任何時候只使用其中的一小部分值,例如10,根據應用程序邏輯中生成的記錄編號。將所有值加載到內存中,然後查找相當不是一個有效的選項,因爲我不會使用所有記錄。有沒有更好的方案來存儲文件中的值,索引或其他內容,以便通過跳過文件中的字節數來獲取並讀取相應的記錄,從而檢索這些密鑰對值?由於這是jar中的資源文件,因此不會對其進行任何修改。索引在J2ME應用了一套使用密鑰對價值

回答

1

如果你知道的記錄長度被創建時,你可以寫出來的記錄以二進制格式的文件。但是在每條記錄開始時,您可以首先寫入一個以字節爲單位的數字,並使用RandomAccessFile通過移動文件指針來訪問記錄。 但是就速度而言,加載到內存將比從文件中讀取更快,但是如果內存溢價,那麼文件不會是一個不好的方法。

傑夫

+0

謝謝,但寫一些這種方法每個記錄之前的字節數確實提供了索引的優勢。假設,如果我需要獲取第512條記錄。我不是直接跳過n字節來獲取記錄,而是我必須得到這個記錄大小,然後跳過這個字節數 – Ram 2009-10-05 06:44:16

+0

是真的,但是你將記錄大小存儲在內存中,或者更具體地說,存儲數量獲得rec1(0字節),rec2(rec1.length),rec3(rec1.length + rec2.length)等所需的字節數。雖然你仍然需要將它存儲在內存中,但你只需要存儲一個int(或long )爲每個記錄而不是整個記錄。 – 2009-10-05 11:55:30

+0

另外,我假設每個記錄不是一個常量大小。如果是,那麼你知道它只是recLength *(recNum-1) – 2009-10-05 11:56:25

0

跳繩在一個罐子內壓縮資源文件的字節是不是真的是最佳的或者與InputStream的你作爲調用Class.getResourceAsInputStream(的結果)的實現可能需要重組,如果你打算在多個設備上運行您的應用程序。後評論其他信息

編輯:

這可能是因爲要做到這一點的最好辦法其實是存儲(問題,答案)數據,1000級不同的班級。

作爲一種解決方案,它會感覺非常奇怪,但類加載器應該只加載您實際使用的10個類,您可以使用簡單的J2SE程序生成1000個源文件,並且可以基於整數加載10個隨機類在他們的名字裏面使用java.lang.Class.forName()

如果JAR文件不會變得太大而無法使用,你基本上依靠的類加載器性能的zip文件格式的索引...

+0

它就像一個縱橫字謎,我從1000中挑選一些隨機的10個問題答案對,並創建一個謎題。因爲這是一個獨立的遊戲,所以不能選擇通過網絡。因此,生成這10個隨機記錄並涉入流中效率並不高,並且加載所有千位也不是有效的。所以我試圖得到一個兩全其美的解決方案 – Ram 2009-10-05 16:41:19