【发布时间】:2013-09-25 14:14:32
【问题描述】:
我的代码需要取一个 0 到 255 之间的整数值并将其作为字符串写入文件。它需要快速,因为它可能会被非常快速地重复调用,因此任何优化都会在重负载下变得明显。关于将大量数据写入文件的有效方法,这里还有其他问题,但是少量数据呢?
这是我目前的方法:
public static void writeInt(final String filename, final int value)
{
try
{
// Convert the int to a string representation in a byte array
final String string = Integer.toString(value);
final byte[] bytes = new byte[string.length()];
for (int i = 0; i < string.length(); i++)
{
bytes[i] = (byte)string.charAt(i);
}
// Now write the byte array to file
final FileOutputStream fileOutputStream = new FileOutputStream(filename);
fileOutputStream.write(bytes, 0, bytes.length);
fileOutputStream.close();
}
catch (IOException exception)
{
// Error handling here
}
}
我认为BufferedOutputStream 在这里没有帮助:构建刷新缓冲区的开销对于 3 个字符的写入可能适得其反,不是吗?我还能做其他改进吗?
【问题讨论】:
-
如果您确实需要在每次写入后主动刷新,那么您在代码中所做的任何事情都无济于事。缓冲区的存在是有原因的。
-
你是否被限制在每次调用该方法时都创建和写入一个新文件?如果没有,您可以保留一个相当大的 byte[] 作为缓冲区,并且仅在程序退出或缓冲区已满时才写入文件。
-
谢谢大家。该文件将始终存在,但每次写入时我都需要完全替换其内容。
-
作为一名长期的 Android 开发人员,我很好奇您的用例将什么定义为“重负载”,因为移动设备上的“重负载”通常不是一件好事,因为它会破坏电池寿命并将您的设备变成真正的热砖。
-
啊,很公平。继续。 :)
标签: java android performance file-io