Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-DataOutputStream writeLong\Byte\Double\Int速度_Java_Performance_Dataoutputstream - Fatal编程技术网

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%遵守发布规则和指南。