我最近刚被问到一个面试问题,这个问题是关于从CSV文件中读取并总结某些单元格中的条目。当被要求对其进行优化时,如果给我们一个大小为100‘t的CSV,我无法回答如何处理内存耗尽的情况。
在Java中,从文件中读取究竟是如何工作的?我们怎么知道什么时候东西太大了?我们该如何处理呢?有人告诉我,你可以传入中间的读取器对象,而不是试图读取整个对象?
发布于 2015-10-06 08:26:40
面试官给了你一个提示-- BufferedReader。对于逐行读取大文件来说,这是一个有效的选择。
小示例:
String line;
BufferedReader br = new BufferedReader("c:/test.txt");
while ((line= br.readLine()) != null) {
//do processing
}
br.close();Here是文档
发布于 2015-10-06 08:27:46
在Java中,有几种方法可以从文件中读取数据,其中一些方法涉及在“读取”由换行字符分隔的数据(例如逐行读取)时,将所有文件行(或数据)保留在内存中。
对于大文件,您希望使用Scanner类一次处理较小的字节(或者使用类似的类一次读取特定的字节)。
示例代码:
FileInputStream inputStream = new FileInputStream(path);
Scanner sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}发布于 2015-10-06 08:27:51
您可以使用RandomAccessFile读取该文件。不过,这可能不是最好的解决方案。
https://stackoverflow.com/questions/32959849
复制相似问题