首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在读取文件,内存不足

正在读取文件,内存不足
EN

Stack Overflow用户
提问于 2015-10-06 08:19:02
回答 3查看 157关注 0票数 0

我最近刚被问到一个面试问题,这个问题是关于从CSV文件中读取并总结某些单元格中的条目。当被要求对其进行优化时,如果给我们一个大小为100‘t的CSV,我无法回答如何处理内存耗尽的情况。

在Java中,从文件中读取究竟是如何工作的?我们怎么知道什么时候东西太大了?我们该如何处理呢?有人告诉我,你可以传入中间的读取器对象,而不是试图读取整个对象?

EN

回答 3

Stack Overflow用户

发布于 2015-10-06 08:26:40

面试官给了你一个提示-- BufferedReader。对于逐行读取大文件来说,这是一个有效的选择。

小示例:

代码语言:javascript
复制
String line;
BufferedReader br = new BufferedReader("c:/test.txt");
while ((line= br.readLine()) != null) {
   //do processing
} 
br.close();

Here是文档

票数 2
EN

Stack Overflow用户

发布于 2015-10-06 08:27:46

在Java中,有几种方法可以从文件中读取数据,其中一些方法涉及在“读取”由换行字符分隔的数据(例如逐行读取)时,将所有文件行(或数据)保留在内存中。

对于大文件,您希望使用Scanner类一次处理较小的字节(或者使用类似的类一次读取特定的字节)。

示例代码:

代码语言:javascript
复制
FileInputStream inputStream = new FileInputStream(path);
Scanner sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
   String line = sc.nextLine();
   // System.out.println(line);
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-06 08:27:51

您可以使用RandomAccessFile读取该文件。不过,这可能不是最好的解决方案。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32959849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档