быстрый и эффективный способ чтения разделенных табуляцией файлов с использованием Java - PullRequest
4 голосов
/ 13 декабря 2011

Какой самый эффективный способ (с точки зрения времени) для чтения текстового файла в список массивов. Размер файла от 100 МБ до 2 ГБ. Файл содержит данные в следующем формате:

From      TO          time     

a         b      13 decc 2009
b         c      13 decc 2009
c         d      13 decc 2009
f         h      13 decc 2009
f         g      13 decc 2009

Edit: Ниже приведен код для чтения файла

public List<InputDataBean> readInputData() throws Exception{
        List<InputDataBean> dataSet = new ArrayList<InputDataBean>();
        FileInputStream fstream = null;
        BufferedReader br = null;
        try{
            fstream = new FileInputStream(filePath);
            br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;
            Set<String> users = new TreeSet<String>();
            while ((strLine = br.readLine()) != null)   {
                InputDataBean data = validateRecord(strLine);
                if(data==null)
                    continue;
                dataSet.add(data);
                users.add(data.getFromName());
                users.add(data.getToName());
            }
            UserKeys.setUsers(users);

        }catch (Exception e){
            throw e;
        }finally{
            try {
                if(null!=br)
                    br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return dataSet;
    }

После чтения файла я хочу сохранить его в массив, а не в базу данных.

Если есть какая-нибудь другая лучшая альтернатива для чтения файла? Это хорошая идея, чтобы вызвать скрипт из Java-программы и прочитать данные с помощью скрипта и сохранить в массив Java.

P.S .: Я действительно ценю, если кто-нибудь может редактировать или улучшать теги.

1 Ответ

3 голосов
/ 13 декабря 2011

Возможно, обтекание BufferedInputStream вокруг FileInputStream еще больше улучшит производительность (поскольку операции чтения будут буферизироваться с кратностью 4 КБ). Вы также можете немного поиграть с размером буфера.

Если вы знаете, что это просто ASCII, вы можете избежать использования Reader и, возможно, избежать создания String для каждой строки.

Если у вас есть время, я бы сравнил производительность вашего решения с существующими инструментами для чтения CSV, такими как CSV из базы данных H2 (раскрытие: я написал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...