在java中读取大型文件的最快方法
用java逐行读取大型文件(文件包含1.000.000行)并解析其中一些行的最快方法是什么?例如,这是我文件的一个片段在java中读取大型文件的最快方法,java,Java,用java逐行读取大型文件(文件包含1.000.000行)并解析其中一些行的最快方法是什么?例如,这是我文件的一个片段 INFO 00:02:12 - returning228885634 INFO 00:02:12 - Step is 1 for 228885634 statusOK duration 0.018 INFO 00:02:
INFO 00:02:12 - returning228885634
INFO 00:02:12 - Step is 1 for 228885634 statusOK duration 0.018
INFO 00:02:12 - Step is 2 for 228885634 statusOK duration 1.55
INFO 00:02:13 - START executing FOR test32967 at Mon Sep 23 00:02:13 GMT+00:00 2013
INFO 00:02:13 - Currently working 7
我只想从这个片段解析测试的id(32967) 像这样的事情很难打败
BufferedReader
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
while ((line = reader.readLine()) != null) {
//do something with line
}
} finally {
try {
reader.close();
} catch (IOException e) {
}
}
要处理大文件,您可以使用新java包中的类来处理IO
nio
包,该包提供了多种机制来管理此类文件,并具有相当高的性能
请参见您可以这样尝试:-
try (SeekableByteChannel bytechanel= Files.newByteChannel(Paths.get("abc.txt"))) {
ByteBuffer byte1 = ByteBuffer.allocateDirect(1000);
for(;;) {
StringBuilder s = new StringBuilder();
int n = bytechanel.read(byte1);
// some code
}
}
还要查找软件包使用Guava的
文件.readLines()
方法,您可以为该方法提供行处理器
Files.readLines(new File("a_file.ext"), Charsets.UTF_8, new LineProcessor<String>() {
@Override
public boolean processLine(String line) throws IOException {
return line.contains("some identifier");
}
@Override
public String getResult() { // the @tring here is the generic type of LineProcessor, change it to whatever
//create a result, get your id or ids
return "";
}
});
Files.readLines(新文件(“a_File.ext”)、Charsets.UTF_8、new LineProcessor(){
@凌驾
公共布尔processLine(字符串行)引发IOException{
返回行。包含(“某些标识符”);
}
@凌驾
公共字符串getResult(){//此处的@tring是LineProcessor的泛型类型,请将其更改为任意类型
//创建结果,获取一个或多个id
返回“”;
}
});
如果您使用的是Java 8,您可以使用类文件和流来尝试
例如:
Files.newBufferedReader(Paths.get("somefile")).lines().map((t)-> r).collect(Collectors.toList());
还从中查找和其他类前缀是否总是类似于
信息xx:yy:zz-开始执行?您有什么事吗?ppeterka没有前缀可以不同,例如test3620:1 OK 0.018如果您同时考虑到所需的行解析,那么知道这是否比BufferedReader快会很有趣。在nio中进行行解析的最佳方式是什么?@JonasKlemming:-这有助于回答您的问题:-?@JonasKlemming:-如果我遗漏了什么,也请告诉我一声?我可以寻求帮助吗用这种方法在文件中的具体位置?你的问题是你想逐行阅读文件。你所说的具体立场是什么意思?以字节或行为单位的位置?以字节为单位,我有一个二进制搜索,返回我要开始阅读的字节位置,还有一个问题,我可以用这个方法将数据插入哈希表吗?对不起,我想我误解了您的用例。若你们想要随机访问,Rahuls的答案可能更接近你们想要的。