我实现了一种使用DataOutputStream
的writeX方法将原始Java类型写入二进制输出文件的方法,但是相比之前通过写入文本文件的实现,我观察到的性能降低了60倍。 BufferedWriter
。
我像这样创建输出流:
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
为什么我的新方法比旧方法慢得多?
答案 0 :(得分:4)
您开始使用BufferedWriter
并切换到无缓冲的OutputStream
。 I / O缓冲可以对性能产生巨大影响,特别是如果您正在编写大量小块。插入BufferedOutputStream
:
DataOutputStream outFile = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("fileLoc")));
这应该可以让你获得与现在相比的显着加速。您也可以尝试调整缓冲区大小以稍微调整性能。我不能说这与原来基于BufferedWriter
的原始实现相比如何;我猜它至少是可比较的,但一般来说很难预测性能。必须进行测试。