Java - DataOutputStream writeLong \ Byte \ Double \ Int Speed

时间:2016-07-18 14:34:16

标签: java performance dataoutputstream

我实现了一种使用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

为什么我的新方法比旧方法慢得多?

1 个答案:

答案 0 :(得分:4)

您开始使用BufferedWriter并切换到无缓冲的OutputStream。 I / O缓冲可以对性能产生巨大影响,特别是如果您正在编写大量小块。插入BufferedOutputStream

DataOutputStream outFile = new DataOutputStream(
        new BufferedOutputStream(
        new FileOutputStream("fileLoc")));

这应该可以让你获得与现在相比的显着加速。您也可以尝试调整缓冲区大小以稍微调整性能。我不能说这与原来基于BufferedWriter的原始实现相比如何;我猜它至少是可比较的,但一般来说很难预测性能。必须进行测试。