java - 标准输出缓冲区大小是多少?

标签 java stdout stderr

我正在向标准输出写入大量数据,并且我注意到根据输出控制台,程序执行时间是可变的。例如,该程序在 NetBeans 控制台上比在 Windows cmd 中慢。

所以我认为写入标准输出会填充一个缓冲区,并且当该缓冲区已满时写入会阻塞(控制台输出消耗得不够快)。

我用 Java 程序重现了此行为。

这是一个输出数据的程序。

public class Output {

    public static void main(String[] args) {
        long start = System.currentTimeMillis();

        for (int i = 0; i < 10_000; i++) {
            System.out.println("Awesone Output ");
        }

        System.out.println("Total time : " + (System.currentTimeMillis() - start));
    }

}

这里是一个使用上述程序中的数据的程序

public class StdoutBlocking {

    public static void main(String[] args) throws IOException, InterruptedException {

        ProcessBuilder processBuilder = new ProcessBuilder("java", "stackoverflowDemo.StdoutBlocking.Output");
        processBuilder.directory(new File("C:/Users/me/Documents/NetBeansProjects/tmp/build/classes"));
        Process process = processBuilder.start();

        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null;
        String lastLine = null;

        while ((line = reader.readLine()) != null) {
            Thread.sleep(10);
            lastLine = line;
        }
        System.out.println("done : " + lastLine);

    }
}

我启动了第二个,它开始输出并消耗其输出。 没有 sleep ,输出程序确实很快,但非常慢。

那么这个缓冲区的大小是多少??

这只是出于我的好奇心,我并不是想实现特定的目标

最佳答案

System.outSystem.err 的默认缓冲区大小是 8192。您可以通过查看其方法的源代码来查看它,例如 println(String )。他们使用具有默认缓冲区大小的 BufferedWriter。

关于java - 标准输出缓冲区大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51160110/

相关文章:

C语言将char类型 '0' -'9'转换成int类型打印到stdout

c - 将 stdout 和 stderr 从 fork 进程复制到文件

linux - 暂时将 fork 的 mongod 进程的 stdout/stderr 路由到控制台

c++ - 如何捕获在 C++ 中运行的命令的 exit_code 和 stderr?

ruby-on-rails - 在 Rails 应用程序中重新定义 $stdout 和 $stderr 的副作用

java - 如何在 Hibernate 中使用第三张表映射两个实体之间的一对多连接?

java - 将文件写入桌面时出现空指针异常,但它不是文件路径

java - 是否有一个只有键而没有值的 java 哈希结构?

java - 将 STDOUT 复制到文件而不停止它在屏幕上显示

java - Sonar : "Close this PreparedStatement"