Самый быстрый способ прочитать файл построчно с двумя наборами строк в каждой строке?

Каков самый быстрый способ чтения строки за строкой, каждая строка содержит две строки. Пример входного файла:

Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file

В каждой строке всегда есть два набора строк, которые мне нужны, даже если между строками есть пробелы, например. "По линии"

В настоящее время я использую

FileReader a = new FileReader(file);
            BufferedReader br = new BufferedReader(a);
            String line;
            line = br.readLine();

            long b = System.currentTimeMillis();
            while(line != null){

Это достаточно эффективно или есть более эффективный способ использования стандартного JAVA API (пожалуйста, никаких сторонних библиотек) Приветствуется любая помощь. Спасибо!


person xiaolin    schedule 17.02.2011    source источник
comment
Любое буферизованное чтение, вероятно, будет значительно быстрее, чем время поиска диска, с которого вы читаете файл.   -  person biziclop    schedule 18.02.2011


Ответы (3)


Это зависит от того, что вы имеете в виду, когда говорите «эффективный». С точки зрения производительности все в порядке. Если вы спрашиваете о стиле и размере кода, я лично делаю почти то же самое с небольшой поправкой:

        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        while((line = br.readLine()) != null) {
             // do something with line.
        }

Для чтения из STDIN Java 6 предлагает вам еще один способ. Используйте класс Console и его методы

readLine() и readLine(fmt, Object... args)

person AlexR    schedule 17.02.2011

import java.util.*;
import java.io.*;
public class Netik {
    /* File text is
     * this, is
     * a, test,
     * of, the
     * scanner, I
     * wrote, for
     * Netik, on
     * Stack, Overflow
     */
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(new File("test.txt"));
        sc.useDelimiter("(\\s|,)"); // this means whitespace or comma
        while(sc.hasNext()) {
            String next = sc.next();
            if(next.length() > 0)
                System.out.println(next);
        }
    }
}

Результат:

C:\Documents and Settings\glowcoder\My Documents>java Netik
this
is
a
test
of
the
scanner
I
wrote
for
Netik
on
Stack
Overflow

C:\Documents and Settings\glowcoder\My Documents>
person corsiKa    schedule 17.02.2011

Если вы хотите разделить два набора строк, вы можете сделать это следующим образом:

BufferedReader in = new BufferedReader(new FileReader(file));
String str;
while ((str = in.readLine()) != null) {
    String[] strArr = str.split(",");
    System.out.println(strArr[0] + " " + strArr[1]);
}
in.close();
person lukastymo    schedule 17.02.2011