我需要对 Java 中的大文件执行简单的 grep 和其他操作。我对 Java NIO 实用程序不太熟悉,但我假设这是我需要使用的。你有什么资源或有用的提示来读/写大文件。另外,我正在开发一个 SWT 应用程序,需要在 GUI 的文本区域内显示部分数据。
3 回答
java.io.RandomAccessFile
使用 long 作为文件指针偏移量,所以应该能够应付。但是,您应该一次读取一个块,否则开销会很高。FileInputStream
工作原理类似。
Java NIO 应该不会太难。你不需要弄乱Selector
s 或类似的东西。事实上,在 JDK7 之前你不能选择 with files。但是,请避免映射文件。没有取消映射,因此如果您尝试大量执行此操作,您将在 32 位系统上耗尽地址空间,或者遇到其他问题(NIO 确实尝试调用 GC,但这有点 hack)。
如果您所做的只是一次读取整个文件的一个块,没有特殊处理,那么 niojava.io.RandomAccessFile
可能是矫枉过正。一次只读取和处理文件的内容。确保使用BufferedInputStream
或BufferedReader
。
如果你必须阅读整个文件来做你正在做的事情,而你一次只阅读一个文件,那么你从 nio 中获得的好处很少。
也许有点跑题了:看看 apache 的VFS。从应用程序的角度来看,它最初是一个库,用于将 ftp-http-file-whatever 系统隐藏在文件系统外观后面。我在这里提到它是因为我在使用这个库访问大文件(通过 ftp)以进行搜索、阅读、复制等(在这种情况下大意味着 > 15MB)方面有积极的经验。