2011-10-23 97 views
2

我已經分配了在「高級」Java課程中創建NIO持久性陣列的任務。這個問題不是那麼多,'如何'要做到這一點,但'什麼'暗示了「NIO持久」。對我來說這是一個新概念;到目前爲止我明白,基本上這只是意味着不是將代碼中的信息動態存儲在典型數組中,而是將數組的信息以字節的形式存儲在磁盤上,並以預定義的大小塊存儲。我感到困惑的是你如何從你試圖存儲的信息中獲得字節,然後如何通過Java的NIO將這些字節寫入文件?NIO持久性陣列:Java

TL; DR - 有人可以解釋一個Java NIO持久性陣列簡而言之?我應該如何着手從頭開始構建一個?

感謝您提前發表任何評論!

編輯:這裏是委派描述,一個字一個字:

目的

熟悉Java的NIO API。

要求

使用Java的NIO創建一個PersistentArray類。該類應該 支持以下方法:

靜態無效創建(字符串文件名,INT緩衝區大小) - 創建一個空的 持久陣列

靜態無效刪除(字符串文件名) - 刪除持久陣列

PersistentArray open(String fileName) - 打開與 持久數組關聯的文件,併爲gets和 puts準備持久數組。 (int bufferID,Buffer buffer) - 將緩衝區存儲在 bufferID的位置(請注意緩衝區大小必須與創建數組時使用的大小 相同)。

Buffer get(int bufferID) - 給定緩衝區ID,檢索緩衝區 ,該緩衝區先前存儲在與bufferID相關聯的位置。

int getNextID() - 返回一個超過存儲緩衝區時使用的最大ID的最大值 。

空隙接近() - 關閉與持久性陣列

而且相關聯的文件,創建示出所有的方法表現爲預期JUnit測試。

與老師複習您的工作。

回答

1

什麼:
有沒有這樣的事情,像「NIO持久陣列」。教師希望你熟悉NIO API(因爲它比舊的IO API更好,更快)。

現在在分配的上下文中,您需要實現這個遵守教師指定的規範的類。沒有花哨的東西,只是實現一個「堅持」的數據(在你的情況下的數組)到一個文件使用nio。

這篇文章可能對你有所幫助。 File I/O: old I/O or NIO. Which is better?

TL; DR:NIO持久性沒有特別的意義。只需創建一個不在內存中的 數組,但也會使用NIO保留其內容。

如何:
現在,它可以以多種方式實現,則建議在何處使用RandomAccessFile的彼得的答案是相當不錯的。

+0

感謝您的洞察力,我會讀一下NIO:] –

+0

開始代碼我會說,你會了解更多。代碼*是*設計。 – zengr

2

我只能假設他/她在談論內存映射文件。使用可以使用RandomAccessFile創建一個MappedByteBuffer,您可以像數組一樣隨機訪問它。您對ByteBuffer所做的更改將持續存在。

+0

我編輯了我的原始提交內容,以包含作業的確切用詞。 –

+0

所以你想包裝一個MappedByteBuffer。 ;) –