我有约。 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