2012-01-06 46 views
1

我目前在Android應用中,我將需要讀取存儲在文件中的一些值的規劃階段。這些值將是一個未知(但可能很大)的數量,在應用程序中加載時會被放入FloatBuffer。 浮動值將以五人一組,三人一組。有效存儲float和短值的陣列在一個文件

當談到高效的文件寫入(或讀取)時我沒有那麼多的經驗,但我的想法是使用DataOutputStream創建文件來編寫浮點數,前面帶有描述五-groups。在這之後,可以寫出三組。
當我寫這我還發現了FileChannel這可以直接讀入緩衝區的幫助,但我從來沒有使用過這一點,是有點不確定如何在這種情況下使用它。現在

,之前,我確實寫任何代碼,我想獲得一些這方面的投入。使用它會有效嗎(我正在考慮從文件讀入緩衝區),還是有更好的方法去解決它?
我會包括一些規格如下文件:

文件必須能:

  • 內含五輛花車。
  • 包含三個浮動組。 (不論是在同一個文件)
  • 訂購。組的順序非常重要,以及組中值的順序。
  • 允許有效(快速並沒有太多存儲器消耗)讀入FloatBuffer。

文件將不必爲:

  • 修改。該應用程序將只讀取文件中的數據,它們將不會在被修改後被修改。
  • 安全。文件中的數據永遠不會表示任何內容,如密碼或其他敏感數據。
  • 快寫。預先在計算機上完成文件的創建。在移動應用程序中它將是隻讀的。

謝謝您的答覆。

編輯:經過一些快速和髒的測試後,我比較了RandomAccessFile和用於讀取數據的緩衝DataInputStream的性能。結果顯示DataInputStream更快(10-100%,取決於文件數量)。

+0

您也可以使用'Scanner'從文件中讀取 - 或者'RandomAccessFile' – fge 2012-01-06 11:57:13

回答

1

如果數據量很大,我仍然會使用SQLite數據庫。藉助Helper,可以輕鬆處理大量的數據,據我所知,由於其對查詢的有效處理,數據集隨機訪問的速度非常快(如果您想順序讀取文件,那麼它可能不會比Dataoutputstream,因爲那麼SQL的查詢例程將總是查詢數據庫並處理結果光標,而不是僅僅通過x增加文件中的位置計數器)。我不確定它是否是最快的方式,但它絕對是一種方便快捷的方式。

2

你可以自己實現所有這些,但我建議你考慮數據庫。 Andoroid支持SQLite,因此可以使用它。創建2個表格:GROUP5和「GROUP53」。定義相關索引,你將能夠存儲數據,使用任何分揀政策檢索它。

如果你仍然喜歡做自己的實現,我建議你將數據存儲在2個文件中:一個用於5個字段和其他3場。在這種情況下,你將永遠知道數據記錄的大小,這樣你就可以使用隨機存取(使用RandomAccessFile或使用mark()skip()定期FileInputStream

使用文件通道沒有任何的優勢在這裏。它允許同時從多個文件讀取。從一個文件讀取相對於常規的FileInputStream(http://alexradzin.blogspot.com/2011/07/file-access-stream-vs-nio-channel.html)會導致性能下降。

+0

感謝您的回答,使用數據庫看起來像是一種選擇,但現在我想創建一個自定義實現。 我會看看RandomAccessFile,看看這可能是我需要的。 – Jave 2012-01-06 13:19:36