我正在研究一些最终将在应用服务器中使用的Java代码,以访问一些非常大的文件(超过1GB,低于20GB),可能托管在NFS共享上。服务于个人请求将涉及这样做:
我现在有一些快乐的简单POC代码,只需打开一个新的只读文件并关闭它:
RandomAccessFile raf=new RandomAccessFile(myFileName, "r");
try{
byte[] buffer = new byte[size];
raf.seek(position);
raf.reafFully(buffer);
return buffer;
}
finally{
raf.close();
}
我想知道这是一种优雅简单的方法,应该能够很好地工作,还是一种愚蠢的简单方法,在繁重的负载下会遇到很多问题(也许我需要建立一个线程安全的读者群,等等)。显然测试这个假设是最好的,但我想知道这两种方法是否有任何最佳实践或已知问题。到目前为止,我还没有弄清楚谷歌搜索......
谢谢!
PS。目前尚不清楚最终版本是否将托管在Windows或* nix上。目前还不清楚如何共享大文件。 PPS。应用服务器可能在群集中配置,因此两个不同的应用服务器可能需要同时读取相同的大型共享文件。
答案 0 :(得分:2)
另一种选择是java NIO,即FileChannel。 FileChannel也是可导航的 它可能比RandomAccessFile更快,因为它可以使用所谓的直接缓冲区。它有一些更有趣的功能,例如它是可中断的。