Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用printwriter vs System.out.print打印整数_Java_Bytearray_Printwriter - Fatal编程技术网

Java 使用printwriter vs System.out.print打印整数

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(

我试图将数组中的字节读取到控制台,如果我使用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);
}
它会打印


有什么区别?根据这一点,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我在每次读取后都添加了一个刷新,效果很好!你能解释一下为什么会这样吗?