【发布时间】:2010-12-05 12:53:22
【问题描述】:
正如标题所说,我正在寻找将整数数组写入文件的最快方法。数组的大小会有所不同,实际上包含 2500 到 25 000 000 个整数。
这是我目前使用的代码:
DataOutputStream writer = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
for (int d : data)
writer.writeInt(d);
鉴于 DataOutputStream 具有写入字节数组的方法,我尝试将 int 数组转换为字节数组,如下所示:
private static byte[] integersToBytes(int[] values) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
for (int i = 0; i < values.length; ++i) {
dos.writeInt(values[i]);
}
return baos.toByteArray();
}
像这样:
private static byte[] integersToBytes2(int[] src) {
int srcLength = src.length;
byte[] dst = new byte[srcLength << 2];
for (int i = 0; i < srcLength; i++) {
int x = src[i];
int j = i << 2;
dst[j++] = (byte) ((x >>> 0) & 0xff);
dst[j++] = (byte) ((x >>> 8) & 0xff);
dst[j++] = (byte) ((x >>> 16) & 0xff);
dst[j++] = (byte) ((x >>> 24) & 0xff);
}
return dst;
}
两者似乎都略微提高了速度,大约 5%。我没有对它们进行足够严格的测试来确认这一点。
是否有任何技术可以加快此文件写入操作,或 Java IO 写入性能最佳实践的相关指南?
【问题讨论】:
-
您希望文件内容的格式准确吗?
-
自己内联代码将使尚未热身的代码更快。但是,如果您运行 5-10 秒的测试,您将看到这是否有真正的改进。 (因为他的 JVM 会为你做这件事)
-
@Karl 只是一个没有格式化的整数序列。
标签: java performance file-io