Java 为什么BufferedOutputStream不';输出数据?

Java 为什么BufferedOutputStream不';输出数据?,java,Java,我尝试创建自己的类,使用BufferedStream将系统输出流同时输出到控制台和文件。但是数据不会出现在BufferedOutputStream中。我应该如何解决这个问题 package com.library.stream; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException

我尝试创建自己的类,使用BufferedStream将系统输出流同时输出到控制台和文件。但是数据不会出现在BufferedOutputStream中。我应该如何解决这个问题

package com.library.stream;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class DoubleEndedStream {
InputStream theInput;
OutputStream theOutput;

public static void main(String[] args) throws IOException, FileNotFoundException {
    DoubleEndedStream sr = new DoubleEndedStream(System.in, System.out);
    sr.doublingTheStream();
}

public DoubleEndedStream(InputStream in, OutputStream out) {
    theInput = in;
    theOutput = out;    
}

public void doublingTheStream() throws IOException, FileNotFoundException  {
    try {
        FileOutputStream fos = new FileOutputStream("C:\\log.txt");
        BufferedOutputStream bout1 = new BufferedOutputStream(fos);
        BufferedOutputStream bout2 = new BufferedOutputStream(theOutput);
        try {
            while (true) {
                int datum = theInput.read();
                if (datum == -1) break;
                bout1.write(datum);
                bout2.write(datum);
            }
            bout1.flush();
            bout2.flush();
        } catch (IOException e) {
            System.err.println("Couldn't read from System.in!");
        }

        bout1.close();
        bout2.close();
        fos.close();
    } catch (FileNotFoundException e) {
        System.err.println("Couldn't find log.txt");
    }
}

}由于
的输入是
系统。在
中,只要您不关闭它(
在unix中ctrl-d
),它将不会返回
-1
,而是挂起并等待输入。由于您仅在收到
-1
时才执行
flush()
,因此无法达到这一点。请尝试在
write()之后刷新。

您对控制台、文件或两者的缓冲输出有问题吗?是否引发异常?我认为如果(datum==-1)中断;这个部分在程序启动时执行,因为可能并没有数据,循环被破坏。你们需要刷新你们的流。它在写之前已经填满了缓冲区。我两个都有问题。它不会抛出异常。谢谢大家。我认为Binyamin Sharet给出了正确的答案。但是如果我每次写的时候都刷新,那么BufferedStream的优势就会消失,所以每隔3次或5次刷新一次,或者任何你认为合适的时间刷新一次。