Java 为什么BufferedOutputStream不';输出数据?
我尝试创建自己的类,使用BufferedStream将系统输出流同时输出到控制台和文件。但是数据不会出现在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
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次刷新一次,或者任何你认为合适的时间刷新一次。