Java 使用printwriter vs System.out.print打印整数
我试图将数组中的字节读取到控制台,如果我使用PrintWriter对象,则不会将任何内容打印到屏幕上,但是,使用System.out.println()可以正常工作。为什么? 下面是我的代码的样子:Java 使用printwriter vs System.out.print打印整数,java,bytearray,printwriter,Java,Bytearray,Printwriter,我试图将数组中的字节读取到控制台,如果我使用PrintWriter对象,则不会将任何内容打印到屏幕上,但是,使用System.out.println()可以正常工作。为什么? 下面是我的代码的样子: private static void readByteArray(byte[] bytes) { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); PrintWriter pw = new PrintWriter(
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);
}
它会打印
有什么区别?根据这一点,PrintWriter方法
print(inti)
打印一个整数,所以我很困惑 System.out变量引用类型为PrintStream
的对象,该对象封装了BufferedOutputStream
(至少在Oracle JDK 7中是这样)。当您在PrintStream
上调用printX()
或write()
方法之一时,它会在内部刷新底层bufferedoutstream
的缓冲区
这在PrintWriter
中不会发生。你必须自己做。或者,您可以创建一个PrintWriter
,并将autoFlush
属性设置为true
,该属性将在每次写入时刷新
PrintWriter pw = new PrintWriter(System.out, true);
如果你读到这篇文章,它会说
- 自动刷新布尔值;如果为true,则使用println、printf或format方法 将刷新输出缓冲区
System.out
变量引用类型为PrintStream
的对象,该对象封装了BufferedOutputStream
(至少在Oracle JDK 7中是这样)。当您在PrintStream
上调用printX()
或write()
方法之一时,它会在内部刷新底层bufferedoutstream
的缓冲区
这在PrintWriter
中不会发生。你必须自己做。或者,您可以创建一个PrintWriter
,并将autoFlush
属性设置为true
,该属性将在每次写入时刷新
PrintWriter pw = new PrintWriter(System.out, true);
如果你读到这篇文章,它会说
- 自动刷新布尔值;如果为true,则使用println、printf或format方法 将刷新输出缓冲区
System.out
变量引用类型为PrintStream
的对象,该对象封装了BufferedOutputStream
(至少在Oracle JDK 7中是这样)。当您在PrintStream
上调用printX()
或write()
方法之一时,它会在内部刷新底层bufferedoutstream
的缓冲区
这在PrintWriter
中不会发生。你必须自己做。或者,您可以创建一个PrintWriter
,并将autoFlush
属性设置为true
,该属性将在每次写入时刷新
PrintWriter pw = new PrintWriter(System.out, true);
如果你读到这篇文章,它会说
- 自动刷新布尔值;如果为true,则使用println、printf或format方法 将刷新输出缓冲区
System.out
变量引用类型为PrintStream
的对象,该对象封装了BufferedOutputStream
(至少在Oracle JDK 7中是这样)。当您在PrintStream
上调用printX()
或write()
方法之一时,它会在内部刷新底层bufferedoutstream
的缓冲区
这在PrintWriter
中不会发生。你必须自己做。或者,您可以创建一个PrintWriter
,并将autoFlush
属性设置为true
,该属性将在每次写入时刷新
PrintWriter pw = new PrintWriter(System.out, true);
如果你读到这篇文章,它会说
- 自动刷新布尔值;如果为true,则使用println、printf或format方法 将刷新输出缓冲区
您是否尝试在第一个函数中使用
pw.println
而不是print
?请看这篇文章:@dasblinkenlight我只是尝试了一下,什么都没有。@SotiriosDelimanolis每次读取后我都添加了一个刷新,效果很好!你能解释一下为什么这样做吗?你有没有尝试在第一个函数中使用pw.println
而不是print
?看看这篇文章:@dasblinkenlight我只是尝试了一下,什么都没有。@SotiriosDelimanolis我在每次读取后都添加了一个刷新,效果很好!你能解释一下为什么这样做吗?你有没有尝试在第一个函数中使用pw.println
而不是print
?看看这篇文章:@dasblinkenlight我只是尝试了一下,什么都没有。@SotiriosDelimanolis我在每次读取后都添加了一个刷新,效果很好!你能解释一下为什么这样做吗?你有没有尝试在第一个函数中使用pw.println
而不是print
?看看这篇文章:@dasblinkenlight我只是尝试了一下,什么都没有。@SotiriosDelimanolis我在每次读取后都添加了一个刷新,效果很好!你能解释一下为什么会这样吗?