我有約。 30000個文件(每個1MB),我想把它放到一個本地方法中,它只需要一個字節數組和它的大小作爲參數。如何將文件(從Java讀取)最有效地傳遞給本地方法?
我看了一些例子和基準(如http://nadeausoftware.com/articles/2008/02/java_tip_how_read_files_quickly),但他們都做了一些其他奇特的事情。
基本上我不在乎文件的內容,我不想訪問該文件或字節數組中的某些內容,或者對它做任何其他操作。我只想將一個文件放入一個儘可能快地接受字節數組的本地方法。
目前我使用的是RandomAccessFile,但是速度非常慢(10MB/s)。
有沒有像
byte[] readTheWholeFile(File file){ ... }
任何東西,我可以投入
native void fancyCMethod(readTheWholeFile(myFile), myFile.length())
你有什麼建議?
有沒有原因你不能在本機代碼本身做I/O?由於存儲器模型不同,將數據從Java傳遞到本機相當昂貴。 – 2010-04-26 16:28:44
不,可悲的是,這是不可能的。我希望有一種方式,JVM認爲放入本地方法的字節數組不會在Java代碼中再次使用,只是將內存範圍提供給本機代碼,而不是開始複製它。 – soc 2010-04-26 16:37:59
有沒有辦法獲得Java中的內存範圍 – 2010-04-26 19:31:15