A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-6-27 08:54  /  2246 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-6-28 17:47 编辑

PrintWriter比BufferedWriter方便,这是不是说PrintWriter可以完全取代BufferedWriter?
如果不是,又该怎么看待它们两者之间的关系呢?
求大家帮我整理下思路,最好有个代码例子。谢谢

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
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了。

点评

看三楼,不解析!希望不会出现类似情况!  发表于 2012-6-27 23:07
回复 使用道具 举报
      一个PrintWriter对象不论其是否带有BufferedWriter缓冲,在字符流和IO系统之间总是存在一个ByteBuffer缓冲,这样呢BufferedWriter缓冲对PrintWriter性能的影响就变得不那么显著了,因为它只起到了减少方法调用次数的作用(实际上是降低了CPU的开销),在成串输出字符模式下这一点体现的会更加明显,因为成串输出本身已显著较少了方法的调用次数。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报

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-27 23:08
回复 使用道具 举报
sunhaodi 发表于 2012-6-27 14:29
PrintWriter和BufferedWriter都是继承java.io.Writer,所以很多功能都一样。不过PrintWriter提供println() ...

我这个就是网上搜的啊, 我自己也看了,自己也写了一遍了, 弄懂了才发上来了。  不是瞎弄的,相信很人多都在论坛找问题,不会的在网上找找的。  没有舍求非要给分哦。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马