黑马程序员技术交流社区

标题: IO流问题 [打印本页]

作者: 赵庆礼    时间: 2012-6-27 08:54
标题: IO流问题
本帖最后由  赵庆礼 于 2012-6-28 17:47 编辑

PrintWriter比BufferedWriter方便,这是不是说PrintWriter可以完全取代BufferedWriter?
如果不是,又该怎么看待它们两者之间的关系呢?
求大家帮我整理下思路,最好有个代码例子。谢谢
作者: 吴琼    时间: 2012-6-27 10:03
PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println()方法可以写不同平台的换行符,而BufferedWriter可以任意设定缓冲大小。
OutputStream可以直接传给PrintWriter(BufferedWriter不能接收),如:
PrintWriter   out
      =   new   PrintWriter(new   BufferedOutputStream(new   FileOutputStream( "foo.out ")));
或者用OutputStreamWriter来将OutputStream转化为Writer.这时就可以用BufferedWriter了。

作者: sbeeqnui1987    时间: 2012-6-27 11:12
      一个PrintWriter对象不论其是否带有BufferedWriter缓冲,在字符流和IO系统之间总是存在一个ByteBuffer缓冲,这样呢BufferedWriter缓冲对PrintWriter性能的影响就变得不那么显著了,因为它只起到了减少方法调用次数的作用(实际上是降低了CPU的开销),在成串输出字符模式下这一点体现的会更加明显,因为成串输出本身已显著较少了方法的调用次数。
作者: 孙浩迪    时间: 2012-6-27 14:29

PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println()方法可以写不同平台的换行符,而BufferedWriter可以任意设定缓冲大小。
OutputStream可以直接传给PrintWriter(BufferedWriter不能接收),如:
PrintWriter   out
      =   new   PrintWriter(new   BufferedOutputStream(new   FileOutputStream( "foo.out ")));
或者用OutputStreamWriter来将OutputStream转化为Writer.这时就可以用BufferedWriter了。


参考下TCP通信
class Tcpserver {
       
         public static void main(String[] args) throws IOException {
               
                  ServerSocket  s = new ServerSocket(9999);
                  
                   Socket st= s.accept();
                   //读取 socket读取流中的数据。
                   BufferedReader br = new
                                   BufferedReader(new InputStreamReader(st.getInputStream()));
                  //目的,socket输出流,将大写数据写入到socket,并发送给客户端
                   /*BufferedWriter  bw =new
                                   BufferedWriter(new OutputStreamWriter(st.getOutputStream()));
*/                  
                  PrintWriter pw = new PrintWriter(st.getOutputStream(),true);
                  
                   String len = null;
                  
                   while((len = br.readLine())!=null){
                            
                            /*  bw.write(len.toUpperCase());
                              bw.newLine();
                              bw.flush();*/
                          
                           pw.println(len.toUpperCase());
                            
                          
                   }
                  
                  
                 st.close();
                 s.close();
                 
        }
       
}


public class TcpSocket {
       
        public static void main(String[] args) throws UnknownHostException, IOException {
               
           Socket s = new Socket("192.168.1.104",9999);
               
           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          
          // BufferedWriter inbw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
          
           PrintWriter  pw = new PrintWriter(s.getOutputStream(),true);
          
           BufferedReader inbr  = new BufferedReader(new InputStreamReader(s.getInputStream()));
          
          
           String len = null;
          
           while((len = br.readLine())!=null){
                  
                    if("over".equals(len))
                        break;
                    
                   pw.println(len);
                   /* inbw.write(len);
                  
                    inbw.newLine();
                    inbw.flush();*/
                    String str=inbr.readLine();
                    
                    System.out.println("server..."+str);
           }
          
          
          s.close();       
          br.close();
        }
       


}

作者: 孙浩迪    时间: 2012-6-28 00:36
sunhaodi 发表于 2012-6-27 14:29
PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println() ...

我这个就是网上搜的啊, 我自己也看了,自己也写了一遍了, 弄懂了才发上来了。  不是瞎弄的,相信很人多都在论坛找问题,不会的在网上找找的。  没有舍求非要给分哦。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2