我創建了一個圍繞java.io.RandomAccessFile
(文件大小僅爲54 KB)的java.nio.MappedByteBuffer
。由此產生的MappedByteBuffer
的「容量」和「限制」大約爲12 KB,因此當我嘗試調用mybytebuffer.get(i > 13044)
或mybytebuffer.put(i > 13044, value)
時,它會拋出InvalidIndexException
。Java.NIO InvalidIndexException - 如何隨機訪問大文件進行讀寫操作
所有這些行爲都記錄在Sun的官方javadoc中。我的問題是我如何使用java.nio ByteBuffers
來讀取或寫入文件中的任何地方(我需要隨機訪問)。我似乎無法找到說明非順序訪問的Java NIO的示例或文檔。
您是否嘗試過調用限制(實際大小)? – bmargulies 2010-01-09 02:57:48
是的,但我不能設置限制>容量。容量是一個不能提高的硬限制。我希望能夠隱藏一個事實,即ByteBuffer將文件包裝到使用它的代碼中,但現在對我來說似乎是不可能的:沒有本地解決方案,並且無法擴展ByteBuffer以進行自己的抽象。 醜。 – 2010-01-09 03:11:33
爲什麼還要爲54KB文件使用內存映射文件?內存映射對於大文件有其優勢。對於小文件,由於映射的初始化需要一些時間,所以它通常比較慢。 – dmeister 2010-01-09 13:58:23