我有包含1 000 002
以下格式的数字的文本文件:
123 456
1 2 3 4 5 6 .... 999999 100000
现在,我需要读取该数据并将其分配给int
变量(前两个数字),并将其余所有数据( 1 000 000个 数字)分配给数组int[]
。
这不是一项艰巨的任务,但是-这太慢了。
java.util.Scanner
: Scanner stdin = new Scanner(new File("./path"));
int n = stdin.nextInt();
int t = stdin.nextInt();
int array[] = new array[n];
for (int i = 0; i < n; i++) {
array[i] = stdin.nextInt();
}
它按例外方式工作,但执行大约需要 7500毫秒 。我需要在几百毫秒内获取该数据。
java.io.BufferedReader
:使用BufferedReader.readLine()
和String.split()
我大约在 1700毫秒内
得到了相同的结果,但是仍然太多了。
如何在不到1秒的时间内读取该数据量?最终结果应等于:
int n = 123;
int t = 456;
int array[] = { 1, 2, 3, 4, ..., 999999, 100000 };
StreamTokenizer
解决方案速度很快(大约需要1400毫秒),但仍然太慢:
StreamTokenizer st = new StreamTokenizer(new FileReader("./test_grz"));
st.nextToken();
int n = (int) st.nval;
st.nextToken();
int t = (int) st.nval;
int array[] = new int[n];
for (int i = 0; st.nextToken() != StreamTokenizer.TT_EOF; i++) {
array[i] = (int) st.nval;
}
PS。无需验证。我100%确定./test_grz
文件中的数据正确。
感谢您的每一个回答,但我已经找到了一种符合我的标准的方法:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./path"));
int n = readInt(bis);
int t = readInt(bis);
int array[] = new int[n];
for (int i = 0; i < n; i++) {
array[i] = readInt(bis);
}
private static int readInt(InputStream in) throws IOException {
int ret = 0;
boolean dig = false;
for (int c = 0; (c = in.read()) != -1; ) {
if (c >= '0' && c <= '9') {
dig = true;
ret = ret * 10 + c - '0';
} else if (dig) break;
}
return ret;
}
读取1百万个整数只需要 300毫秒 !
该编码能够读取excel文件中的小数据...但不读取excel文件中的大数据文件....如何进一步修改代码?
问题内容: 我有以下格式的文本文件: Details.txt 该文件是.txt文件。我想从该文件中读取课程标题,并打印相应的教科书和教师信息。但是我不确定该遵循什么程序?将信息存储在数组中效率不高!我应该如何进行?注意:我无法更改文件中的信息,因此不应更改!显然,文件将通过以下代码读取: 但是我应该如何根据课程名称,教科书和讲师的标签从该文件中提取数据! 问题答案: 首先正确地逐行阅读文件,然后搜
问题内容: 我正在读取csv并与mysql检查记录是否存在于我的表中或不在php中。 csv大约有25000条记录,当我运行我的代码时,它在2m 10s后显示“服务不可用”错误(加载:2m 10s) 在这里我添加了代码 注意:我只想列出表中不存在的记录。 请为我建议解决方案… 问题答案: 首先,您应该了解,在使用file_get_contents时,您会将整个数据字符串提取到一个变量中,该变量存储
问题内容: 我需要非常了解Java和内存问题的人的建议。我有一个大文件(大约1.5GB),我需要将此文件切成许多小文件(例如100个小文件)。 我通常知道如何做到这一点(使用),但是我想知道你是否对内存有任何建议,或者提示如何更快地做到这一点。 我的文件包含文本,它不是二进制文件,每行大约有20个字符。 问题答案: 首先,如果你的文件包含二进制数据,则使用将是一个大错误(因为你会将数据转换为Str
问题内容: 我试图读取就是BEING柏油,流媒体,以标准输入存档,但我不知怎么读 远远 在管道的数据超过焦油发送。 我这样运行我的命令: 源代码是这样的: 对于100MB的涂油文件夹,我将获得1468个4MB的块(即6.15GB)!此外,数组的大小似乎无关紧要:如果将块大小设置为40MB,我仍然会获得约1400个40MB数据块,这根本没有意义。 要使用Go正确读取数据,我需要做些什么吗? 问题答案
我不熟悉使用vertx,我正在使用vertx文件系统api来读取大文件。 但是RAM在读取时被消耗殆尽,资源在使用后甚至没有被刷新。vertx文件系统api还建议不要使用此方法读取非常大的文件,否则可能会耗尽可用的RAM。 除此之外还有其他选择吗?