【问题标题】:buffered writer vs. sys out print缓冲写入器与系统输出打印
【发布时间】:2016-07-16 22:06:08
【问题描述】:

我对 java 很陌生,想了解为什么这不起作用的原因。为什么 sys out 打印工作完美,但缓冲的 writer 却不行?我只是想了解两者之间的区别/

//print the input matrix to the user

System.out.println("Matrix read: ");
System.out.println("------------------" +
                   "---------------------");
for (int i = 0; i < size; i++) {
    for (int j = 0; j < size; j++) {
        System.out.printf("%5d ", a[i][j]);
        bw.write(a[i][j]);
        bw.flush();
    }

    //print a blank line
    System.out.println();

缓冲写入器输出(来自 .txt 文件):

     The Determinant is: 5
     The Determinant is: 3
     �The Determinant is: 64
�   ��  ���The Determinant is: 270
������   ���The Determinant is: 0
��������    ����The Determinant is: 270
������    The Determinant is: 0
    The Determinant is: 0

系统输出打印输出:

Matrix read: 
---------------------------------------
    5 
---------------------------------------
Matrix read: 
---------------------------------------
    2     3 
---------------------------------------
    5     9 
---------------------------------------
Matrix read: 
---------------------------------------
    3    -2     4 
---------------------------------------
   -1     5     2 
---------------------------------------
   -3     6     4 
---------------------------------------

【问题讨论】:

    标签: java bufferedwriter


    【解决方案1】:

    而不是用

    写一个原始的int
    bw.write(a[i][j]);
    

    (如果您想将相同的内容写入您的BufferedWriter)您需要以相同的方式格式化您的输出。你可以使用String.format 之类的东西

    bw.write(String.format("%5d ", a[i][j]));
    

    而且,如果你希望它是相同的,你需要添加一个新行(你称之为System.out.println),比如

    bw.write(System.lineSeparator());
    

    【讨论】:

      【解决方案2】:

      使用write() 可以写入字节。在您的第一个矩阵中,您有数值 5。如果您使用 write(5),则写入字节值 5,这是您正在使用的文本编辑器以某种方式显示的不可打印字符。如果您使用 hexdump 实用程序,您将看到它实际上是字节 5

      printf 函数你五个格式字符串,你告诉它如何格式化参数,它是数字5%5d 这里的意思是将数字格式化为宽度至少为 5 的字符串,前面用空格填充。然后是一个空格。

      如果您想对缓冲写入器产生相同的效果,请将其包装在 PrintWriter 中并使用相同的 printf 方法和参数,您将获得相同的结果。如果您只想将BufferedWriter 中的数字格式化为字符串,则必须在写入之前将数字转换为字符串,例如。 G。使用Integer.toString(5).getBytes(),然后根据write()方法写入这个字节数组。

      【讨论】:

        【解决方案3】:

        System.out 是一个PrintStream;要获得相同的行为,请尝试使用用您的文件名实例化的PrintStream(或PrintWriter)并使用print/println/format 方法。

        BufferedWriter.write(int c) 方法将int 参数解释为一个字符,所以如果你传递32,它将打印一个空格字符;这很可能不是您想要的。

        【讨论】:

          猜你喜欢
          • 2016-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-07
          相关资源
          最近更新 更多