代码之家  ›  专栏  ›  技术社区  ›  Crypto

如何使用BufferedReader将大的csv数据读取到内存中?

  •  0
  • Crypto  · 技术社区  · 3 年前

    以下是我读取数据的方式:

    List<String[]> res = new ArrayList<>();
    
    S3Object object = s3.getObject(s3BucketName, path);
    InputStream inputStream = object.getObjectContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    
    while ((line = reader.readLine()) != null) {
        res.add(line.split(","));
    }
    reader.close();
    

    在我读取10M行之后,它将抛出OutOfMemory异常。

    我试着用-Xms=20G-Xmx=20G作为参数,奇怪的是当我把它改为-Xms=2m-Xmx=2m时,两个结果都是一样的,它们只能读取10M行。我的方法是将其放入Intellij程序参数框中。

    我希望找到一种将所有行读入内存的方法。我的文件是16M行x 16列,只有1G大小,所以20G应该可以。

    0 回复  |  直到 3 年前
        1
  •  -1
  •   Mar-Z    3 年前

    我的方法是将其放入Intellij程序参数框中。

    如果使用IntelliJ运行程序,则为IntelliJ配置的内存限制也会限制程序。尝试从命令行独立运行它以获得更好的结果。