在Thinking in java的书中,有这样一个例子,我只给出了部分代码,如下:
//   4.   File   output  
          try   {  
              BufferedReader   in4   =   new   BufferedReader(  
                  new   StringReader(s2));  
              PrintWriter   out1   =   new   PrintWriter(  
                  new   BufferedWriter(new   FileWriter("IODemo.out")));  
              int   lineCount   =   1;  
              while((s   =   in4.readLine())   !=   null   )  
                  out1.println(lineCount++   +   ":   "   +   s);  
              out1.close();  
          }   catch(EOFException   e)   {  
              System.err.println("End   of   stream");  
          }   
首先是用·new   FileWriter("IODemo.out")来建立一个接收数据的文件,外面包裹着bufferedWrite来实现缓冲,这都好理解,我想请问一下最外面用PrintWriter来包裹着是什么目的?没有它可以吗?

解决方案 »

  1.   

    另外一个例子是:
        try {
          DataOutputStream out2 = new DataOutputStream(
            new BufferedOutputStream(
              new FileOutputStream("Data.txt")));
          out2.writeDouble(3.14159);
          out2.writeUTF("That was pi");
          out2.writeDouble(1.41413);
          out2.writeUTF("Square root of 2");
          out2.close();
          DataInputStream in5 = new DataInputStream(
            new BufferedInputStream(
              new FileInputStream("Data.txt")));
          // Must use DataInputStream for data:
          System.out.println(in5.readDouble());
          // Only readUTF() will recover the
          // Java-UTF String properly:
          System.out.println(in5.readUTF());
          // Read the following double and String:
          System.out.println(in5.readDouble());
          System.out.println(in5.readUTF());
        } catch(EOFException e) {
          throw new RuntimeException(e);
        }
    这个例子我倒是能看懂,但书中说“为了使输出可供另一个流恢复的数据,我们必需使用DataOutputStream 写入数据, DataInputStream来恢复数据。我想请问为何不可使用reader和writer所对应的BufferedReader和BufferedWriter?我只知道datainputstream是用来处理字符的而bufferedreader是用来处理字节的。这是说对于同一段数据,即可以按字节的方式来处理又可以按字符的方式来处理,是这样吗?
      

  2.   

    println是PrintWriter的方法,你后面有out1.println,当然不能少了PrintWriter了
      

  3.   

    这个问题好啊,我感觉是api设计的问题。
      

  4.   

    1,PrintWriter是打印流,在BufferedReader外边包一层它是为了把读出的内容打印出来.
    2,BufferedReader是带缓冲的读入流.
    建议lz参考一下think in java中的流一章.
      

  5.   

    PrintWriter是写操作。向文件里写东西。
    我只知道datainputstream是用来处理字符的而bufferedreader是用来处理字节的。
    这句话错了,reader与writer大多处理字符的。
    data使用字节处理比较好。因为字符也是几个字节组成,有些情况下,用字符读取会出现读取不完成,形成乱码等。
      

  6.   

    第一 我想请问为何不可使用reader和writer所对应的BufferedReader和BufferedWriter?我只知道datainputstream是用来处理字符的而bufferedreader是用来处理字节的。
    凡是带stream的是字节流,带reader的是字符流,这个搞反了。
    第二
    对于同一段数据,即可以按字节的方式来处理又可以按字符的方式来处理,是这样吗?

    是的
      

  7.   

    封装 PrintWriter 只是为了格式话打印,不要这个也是没有关系
      

  8.   

      try { 
          DataOutputStream out2 = new DataOutputStream( 
            new BufferedOutputStream( 
              new FileOutputStream("Data.txt"))); 
          out2.writeDouble(3.14159); 
          out2.writeUTF("That was pi"); 
          out2.writeDouble(1.41413); 
          out2.writeUTF("Square root of 2"); 
          out2.close(); 
          DataInputStream in5 = new DataInputStream( 
            new BufferedInputStream( 
              new FileInputStream("Data.txt"))); 
          // Must use DataInputStream for data: 
          System.out.println(in5.readDouble()); 
          // Only readUTF() will recover the 
          // Java-UTF String properly: 
          System.out.println(in5.readUTF()); 
          // Read the following double and String: 
          System.out.println(in5.readDouble()); 
          System.out.println(in5.readUTF()); 
        } catch(EOFException e) { 
          throw new RuntimeException(e); 
    }  在Thinking in java书中说“为了使输出可供另一个流恢复的数据,我们必需使用DataOutputStream 写入数据, DataInputStream来恢复数据。
    我想请问为何不可使用reader和writer所对应的BufferedReader和BufferedWriter来应用到这里的情况?
    一种是以字节为单位来处理的,一种是以字符为单位的。谢谢。
      

  9.   

    建议楼主多练习使用API DataInputStream作用于将数据以JAVA基本数据类型的格式读入 DataOutPutStream将数据以JAVA基本数据类型的格式写出 所以2者一般是配对使用的
    例如DataInputStream中的readFloat()表示将输入流中的下4个字节读取出来以浮点数形式返回 当然如果这4个字节的数据无法转换成浮点数会产生异常