【发布时间】:2014-07-31 12:49:43
【问题描述】:
我怎样才能使这段代码非常快? 它使用 RandomAccessFile (in) 读取原始图像并使用 DataOutputStream (out) 将其写入文件
final int WORD_SIZE = 4;
byte[] singleValue = new byte[WORD_SIZE];
long position;
for (int i=1; i<=100000; i++)
{
out.writeBytes(i + " ");
for(int j=1; j<=17; j++)
{
in.seek(position);
in.read(singleValue);
String str = Integer.toString(ByteBuffer.wrap(singleValue).order(ByteOrder.LITTLE_ENDIAN).getInt());
out.writeBytes(str + " ");
position+=WORD_SIZE;
}
out.writeBytes("\n");
}
内部for每17个元素在文件中创建一个新行
谢谢
【问题讨论】:
-
首先:删除 System.out :-)
-
@achingfingers 哈哈哈,谢谢 :)
-
在
DataOutputStream之外使用BufferedOutputStream以避免写入每个原始元素。 -
另外你确定你需要
RandomAccessFile吗? -
为每 4 个字节分配一个
ByteBuffer,这不是一个好主意。读取内存映射文件(通过ByteBuffer)应该更快。或者按照建议在BufferedOutputStream周围使用DataOutputStream,并使用Integer.reverseBytes更改字节顺序。
标签: java performance io random-access