【问题标题】:fast and efficient way to read tab separated file using java使用java读取制表符分隔文件的快速有效方法
【发布时间】:2012-01-19 01:47:18
【问题描述】:

将文本文件读入数组列表的最有效方法是什么(就时间而言)。文件大小为 100 MB 到 2 GB。该文件包含以下格式的数据:

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

编辑: 以下是读取文件的代码

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.:如果有人可以编辑或改进标签,我真的很感激。

【问题讨论】:

  • 首先,您是如何阅读文件的?没有示例代码可以允许任何人用作建议的示例。其次,您期望的标准是什么?
  • 不要忘记尝试使用类似 ensureCapacity()
  • stackoverflow 中有一些关于在 Java 中解析制表符分隔文件的问题。我在这里找到了一个:stackoverflow.com/questions/1635764/…
  • 你对数据做了什么?如果它进入数据库,您应该使用数据库提供的工具(大多数数据库都这样做)。将大约 2 GB 的数据存储到堆中(当您读取文件时)可能不是一个好主意...通常,如果您必须在 java 中执行此操作,缓冲读取器就可以了。
  • @thotheolh:感谢您的建议。抱歉,我想使用有效的方式读取文件(就时间而言)

标签: java performance file


【解决方案1】:

可能将BufferedInputStream 包裹在 FileInputStream 周围会进一步提高性能(因为读取将以 4 KB 的倍数进行缓冲)。您也可以稍微调整一下缓冲区大小。

如果您知道它只是 ASCII,则可以避免使用 Reader 并可能避免为每一行创建 String

如果您有时间,我会将您的解决方案的性能与现有的 CSV 阅读器工具进行比较,例如 CSV tool from the H2 database(披露:我写的)。

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2022-07-27
    相关资源
    最近更新 更多