Java-DataOutputStream writeLong\Byte\Double\Int速度
我实现了一种使用Java-DataOutputStream writeLong\Byte\Double\Int速度,java,performance,dataoutputstream,Java,Performance,Dataoutputstream,我实现了一种使用DataOutputStream的writeX方法将基本Java类型写入二进制输出文件的方法,但我发现,与以前通过BufferedWriter写入文本文件的实现相比,性能要慢60倍 我创建的输出流如下所示: DataOutputStream outFile = new DataOutputStream(new FileOutputStream("fileLoc")); 我使用此方法写入此类流: public static void writeFunctionPoint (Dat
DataOutputStream
的writeX方法将基本Java类型写入二进制输出文件的方法,但我发现,与以前通过BufferedWriter
写入文本文件的实现相比,性能要慢60倍
我创建的输出流如下所示:
DataOutputStream outFile = new DataOutputStream(new FileOutputStream("fileLoc"));
我使用此方法写入此类流:
public static void writeFunctionPoint (DataOutputStream outFile, FunctFileSortCriterion functPt) throws IOException
{
outFile.writeLong (functPt.time);
outFile.writeBytes (functPt.dfid);
outFile.writeDouble (functPt.value);
outFile.writeInt (functPt.qualifier);
} // end method writeFunctionPoint
为什么我的新方法比我的旧方法慢得多?您从使用
缓冲写入程序开始,然后切换到无缓冲输出流。I/O缓冲会对性能产生巨大的影响,尤其是在编写大量小片段时。插入一个缓冲输出流
:
DataOutputStream outFile = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("fileLoc")));
这应该会让你比现在有一个相当大的加速。您还可以尝试调整缓冲区大小以稍微调整性能。但是,我不能说这与您最初基于BufferedWriter
的实现相比会如何;我想这至少是可比的,但总体而言,性能很难预测。测试是必不可少的。如果没有看到您的代码,我们只能猜测。你是在问这些类是否天生很慢吗?是的,我以前的实现涉及使用BufferedWriter并将字符串直接写入文本文件,但是我发现使用这个新的实现成本非常高。DataOutputStream
是缓冲的吗(通过环绕缓冲输出流
)?更一般地说,不要让我们猜测。即使您进行了编辑,我们对您的程序仍有太多不了解的地方,无法给出可靠的答案。请提供答案。请不要让人们通过评论来查找重要信息。不需要阅读评论就可以了解正在发生的事情。您应该作为n编辑到原始问题。感谢您发布了一个合乎逻辑且直截了当的答案,并且没有抨击我没有100%遵守发布规则和指南。