我正在尝试将数组中的字节读取到控制台,如果我使用PrintWriter对象,则不会在屏幕上打印任何内容,但是,使用System.out.println()可以正常工作。为什么呢?
以下是我的代码:
private static void readByteArray(byte[] bytes) {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
PrintWriter pw = new PrintWriter(System.out);
int c;
while((c = bais.read()) != -1) {
pw.print(c);
}
该代码不起作用,但如果我这样做:
private static void readByteArray(byte[] bytes) {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
PrintWriter pw = new PrintWriter(System.out);
int c;
while((c = bais.read()) != -1) {
System.out.println(c);
}
打印。
有什么区别?根据这个http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html,PrintWriter方法print(int i)
打印一个整数,所以我很困惑。
答案 0 :(得分:3)
System.out
变量引用了PrintStream
类型的对象,它包装了BufferedOutputStream
(至少在Oracle JDK 7中)。当您在printX()
上调用其中一个write()
或PrintStream
方法时,它会在内部刷新基础BufferedOutputStream
的缓冲区。
PrintWriter
不会发生这种情况。你必须自己做。或者,您可以创建一个PrintWriter
,其autoFlush
属性设置为true
,每次写入时都会刷新。
PrintWriter pw = new PrintWriter(System.out, true);
如果您阅读此constructor's javadoc,则说明
- autoFlush 布尔值;如果为true,则为println,printf或format方法 将刷新输出缓冲区