正如标题所说,我正在寻找将整数数组写入文件的最快方式。这些数组的大小会有所不同,实际上可能包含2500到2500万个整数。
以下是我目前使用的代码:
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写性能最佳实践的相关指南?