我有,我會在我的J2ME應用程序中使用,從資源文件中讀取它的一些1000密鑰對的值。但是,我將在任何時候只使用其中的一小部分值,例如10,根據應用程序邏輯中生成的記錄編號。將所有值加載到內存中,然後查找相當不是一個有效的選項,因爲我不會使用所有記錄。有沒有更好的方案來存儲文件中的值,索引或其他內容,以便通過跳過文件中的字節數來獲取並讀取相應的記錄,從而檢索這些密鑰對值?由於這是jar中的資源文件,因此不會對其進行任何修改。索引在J2ME應用了一套使用密鑰對價值
回答
如果你知道的記錄長度被創建時,你可以寫出來的記錄以二進制格式的文件。但是在每條記錄開始時,您可以首先寫入一個以字節爲單位的數字,並使用RandomAccessFile通過移動文件指針來訪問記錄。 但是就速度而言,加載到內存將比從文件中讀取更快,但是如果內存溢價,那麼文件不會是一個不好的方法。
傑夫
跳繩在一個罐子內壓縮資源文件的字節是不是真的是最佳的或者與InputStream的你作爲調用Class.getResourceAsInputStream(的結果)的實現可能需要重組,如果你打算在多個設備上運行您的應用程序。後評論其他信息
編輯:
這可能是因爲要做到這一點的最好辦法其實是存儲(問題,答案)數據,1000級不同的班級。
作爲一種解決方案,它會感覺非常奇怪,但類加載器應該只加載您實際使用的10個類,您可以使用簡單的J2SE程序生成1000個源文件,並且可以基於整數加載10個隨機類在他們的名字裏面使用java.lang.Class.forName()
。
如果JAR文件不會變得太大而無法使用,你基本上依靠的類加載器性能的zip文件格式的索引...
它就像一個縱橫字謎,我從1000中挑選一些隨機的10個問題答案對,並創建一個謎題。因爲這是一個獨立的遊戲,所以不能選擇通過網絡。因此,生成這10個隨機記錄並涉入流中效率並不高,並且加載所有千位也不是有效的。所以我試圖得到一個兩全其美的解決方案 – Ram 2009-10-05 16:41:19
- 1. 使用一對值作爲密鑰
- 2. 使用值在Scala中檢索密鑰
- 3. 使用j2me在設備上存儲生成的密鑰對
- 4. 基於密鑰檢索班級價值
- 5. 從應用引擎數據存儲中檢索密鑰/ ID值?
- 6. 推索引值,只有一個對象的匹配密鑰
- 7. angularjs:解決密鑰對的價值
- 8. '唯一'的唯一密鑰或索引
- 9. 使用索引,而不是價值
- 10. 密鑰索引搜索存在表
- 11. 如何使用相同的密鑰組合一個DStream密鑰和值對?
- 12. Mysql密鑰引用
- 13. J2ME GameCanvas識別密鑰
- 14. 獲取消費JSON的iOS應用程序密鑰的價值
- 15. 使用價值在應用
- 16. 使用可變密鑰使用在JavaScript中值的對象
- 17. 對flymake和flyspell使用一個密鑰
- 18. 需要MySQL密鑰索引?
- 19. 查找條目使用密鑰索引在UNIX
- 20. 在SSL套接字連接中使用兩個密鑰對
- 21. 谷歌應用引擎ReferenceProperty與密鑰
- 22. iPhone訪問應用引擎密鑰
- 23. Google應用引擎GQL查詢密鑰
- 24. 使用itertools創建了一個價值
- 25. 輸入密鑰應該用於搜索?
- 26. Python的 - 套使用相同的密鑰
- 27. 使用密鑰值計算密鑰校驗值
- 28. 通過引用調用創建密鑰索引
- 29. 使用對稱密鑰加密數組
- 30. 只用一個密鑰在密鑰中查找密鑰名稱?
謝謝,但寫一些這種方法每個記錄之前的字節數確實提供了索引的優勢。假設,如果我需要獲取第512條記錄。我不是直接跳過n字節來獲取記錄,而是我必須得到這個記錄大小,然後跳過這個字節數 – Ram 2009-10-05 06:44:16
是真的,但是你將記錄大小存儲在內存中,或者更具體地說,存儲數量獲得rec1(0字節),rec2(rec1.length),rec3(rec1.length + rec2.length)等所需的字節數。雖然你仍然需要將它存儲在內存中,但你只需要存儲一個int(或long )爲每個記錄而不是整個記錄。 – 2009-10-05 11:55:30
另外,我假設每個記錄不是一個常量大小。如果是,那麼你知道它只是recLength *(recNum-1) – 2009-10-05 11:56:25