在Java中将整数数组写入文件的最快方法是什么?
2022-09-04 05:31:29
正如标题所说,我正在寻找将整数数组写入文件的最快方法。数组的大小会有所不同,并且实际上将包含 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 写入性能最佳实践的相关指南?