Java - DataOutputStream writeLong\Byte\Double\Int 速度

Java - DataOutputStream writeLong\Byte\Double\Int Speed

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

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

您开始使用 BufferedWriter 并切换到无缓冲 OutputStream。 I/O 缓冲会对性能产生巨大影响,尤其是当您编写大量小片段时。插入一个BufferedOutputStream:

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

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