我有一个很大的文本文件,但是没有换行符。它只包含一个很长的字符串(包含所有ASCII字符的1行巨大的字符串),但是到目前为止一切正常,因为我可以将整行读入Java的内存中,但是我想知道是否有内存由于文件变得如此之大(如5GB
+),并且程序无法一次将整个文件读入内存,因此出现泄漏问题,那么在那种情况下,读取此类文件的最佳方法是什么?我们可以将巨大的线条分成2个部分,甚至多个块吗?
这是我读取文件的方式
BufferedReader buf = new BufferedReader(new FileReader("input.txt"));
String line;
while((line = buf.readLine()) != null){
}
一个String只能有20亿个字符长,每个字符要使用2个字节,因此,如果您读取5 GB的行,则将使用10 GB的内存。
我建议您分块阅读文本。
Reader reader = new FileReader("input.txt");
try {
char[] chars = new char[8192];
for(int len; (len = reader.read(chars)) > 0;) {
// process chars.
}
} finally {
reader.close();
}
无论文件大小如何,这都将使用大约16 KB。
问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此当我经过它们时,为了节省时间,我离
问题内容: 我需要在文本文件中读写数据,但是还无法弄清楚该怎么做。 我在Swift的iBook中找到了此示例代码,但我仍然不知道如何写入或读取数据。 问题答案: 为了进行读写,您应该使用可写的位置,例如documents目录。以下代码显示了如何读写简单的字符串。您可以在操场上进行测试。 雨燕3.x-5.x 斯威夫特2.2 斯威夫特1.x
问题内容: 我们如何从文本文件读取数据并将其存储在String变量中? 是否有可能在方法中传递文件名,并且它将返回字符串,即文件中的文本。 我必须导入哪种工具?声明列表会很棒。 问题答案: 这些是必需的进口: 这是一种方法,通过将文件名作为参数传递给它,您可以从文件中进行读取,如下所示:
假设我有一个文本文件,每行有一个数字代码和一个字符串标签: 我如何打印前面的非零数字和每行的前两个单词的总和?假设数字总是4位数,单词与数字之间用一个空格隔开。例如,我会得到: 我试图初始化这个,但我不知道从这里去哪里
问题内容: 我目前正在尝试从Python 2.7中的.csv文件中读取数据,该文件最多包含100万行和200列(文件范围从100mb到1.6gb)。对于少于300,000行的文件,我可以(非常缓慢地)执行此操作,但是一旦超过该行,就会出现内存错误。我的代码如下所示: 在getstuff函数中使用else子句的原因是,所有符合条件的元素都将一起列在csv文件中,因此,经过它们以节省时间时,我离开了循