使用printwriter与System.out.print打印整数

时间:2014-01-02 19:56:13

标签: java bytearray 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);
}

打印。

有什么区别?根据这个http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html,PrintWriter方法print(int i)打印一个整数,所以我很困惑。

1 个答案:

答案 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方法   将刷新输出缓冲区
  •