【问题标题】:What does it really mean by reading file into memory all at once?一次将文件全部读入内存到底意味着什么?
【发布时间】:2021-01-22 00:41:49
【问题描述】:

我对“不要一次将文件全部读入内存”这一术语感到困惑。对于下面的代码,说我不是一次将文件全部读入内存,而是逐行读入内存是否正确?

File file = new File("C:\\Users\\Desktop\\test.txt"); 
  
  BufferedReader br = new BufferedReader(new FileReader(file)); 
  
  String st; 
  while ((st = br.readLine()) != null) 
    System.out.println(st); 
  } 
} 

【问题讨论】:

  • 一次阅读或逐行阅读并不重要,重要的是是否强制运行时将所有内容保存在内存中。由于您正在逐行处理行,而不会将它们保留超过必要的时间,因此您并没有落入不鼓励的反模式。但请注意,建议是避免在内存中保留超过所需的内容,但如果您的任务需要将所有内容都保存在内存中,那么它就是这样......

标签: java bufferedreader bufferedinputstream


【解决方案1】:

对于下面的代码,说我不是一次将文件全部读入内存,而是逐行读入内存是否正确?

您不能做出任何此类假设。由于您使用的是 BufferedReader,因此您可以肯定地说,您正在将一些文件读入内存缓冲区,也许是所有文件,但缓冲区在控制中,而不是您.并且当缓冲区的数据已经耗尽时,如果还有数据要读取,那么将读取更多的文件。

【讨论】:

    【解决方案2】:

    对于下面的代码,说我不是一次将文件全部读入内存,而是逐行读入内存是否正确?

    是的,这是正确的。在这段代码中,您并没有陷入将文件读入内存的反模式。

    您的代码允许您使用少量且有限的内存来处理任意大的文件,这就是指南的重点。

    【讨论】:

    • 将文件读入内存不是反模式。如果您确定您的部署方案(文件的数量和大小、内存量),那么这样做非常好。
    • 您可能同意将文件读入内存以串行方式处理它是一种常见但不好的初始方法。如果不是反模式,你会怎么称呼它?
    猜你喜欢
    • 2012-03-19
    • 2016-12-11
    • 2014-03-17
    • 1970-01-01
    • 2012-07-14
    • 2017-11-05
    • 1970-01-01
    • 2023-03-10
    • 2020-01-03
    相关资源
    最近更新 更多