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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Forever。 中级黑马   /  2012-7-1 00:26  /  2711 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Forever。 于 2012-7-1 12:13 编辑

br = new BufferedReader(new FileReader(oldfile));
                        bw = new BufferedWriter(new FileWriter(newfile));
                        
                        char[] c = new char[1024];
                        int len = 0;
                        while((len = br.read(c))!=-1)
                        {
                                System.out.println(len);
                                bw.write(c, 0, len);
                        }
写程序的时候经常用这个方法,用的时候就这样用,但是总觉得理解的不够透彻。还请高手帮帮忙。
其实我最不理解的是那个write(c,0,len)方法。
透彻的说一下这个过程。十分3Q

4 个回复

倒序浏览
bw.write(c, 0, len);
这是因为每次向输出流中写的时候,会将整个缓冲数组1024个字符串都会输出,而实际的有效长度的
字符只是len,为了写入更准确,也为了节省空间。最好规定只写入有效长度(0到len),也就是从0到len。
回复 使用道具 举报
本帖最后由 小张童鞋 于 2012-7-1 10:32 编辑

                        char[] c = new char[1024];//定义了一个临时存储数据的数组,其长度为1024或1024的整数倍
                        int len = 0;
                        while((len = br.read(c))!=-1)//将br中的数据写进临时存储数组c中
                        {
                                System.out.println(len);
                                bw.write(c, 0, len);//将临时存储数组c中的数据(从0角标(c[0])开始,到c[len]结束的数据) 写进到bw中
                        }
回复 使用道具 举报
  1.         BufferedReader br = new BufferedReader(new FileReader(oldfile));
  2.         BufferedWriter bw = new BufferedWriter(new FileWriter(newfile));
  3.         /* 以上操作使用了装饰设计模式,通过构造方法接收被装饰的对象,并基于被装饰的对象的功能,提供更强的功能
  4.          * 即通过缓冲区读写,提供了增强的读写操作
  5.          * */
  6.    
  7.     char[] c = new char[1024];//定义字符数组,使得字符读取流和写入流相关联,其实这里已经没有必要,因为你之前定义的缓冲区中已经封装了数组
  8.     int len = 0;
  9.     while((len = br.read(c))!=-1)//循环读取流中数据,循环条件是,如果已到达流的末尾,则返回 -1
  10.     {
  11.             System.out.println(len);//打印每次循环读取到的字符数
  12.             bw.write(c, 0, len);//写入字符数组“c”的某一部数据,即只写入:从0到len位置的数据
  13.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张文强 于 2012-7-1 11:07 编辑
  1. /*
  2. *
  3. * 首先用String或File对象创建一个FileReader,为了提高效率把FileReader的引用交给BufferedReader。
  4. * 然后向新文件写入数据,同理创建FileReader,把FileReader的引用交给BufferedReader。
  5. *
  6. * 举个现实实际点的例子,秋收的时候地里有一大堆粮食要往仓库,分两种情况
  7. * 1、是自己一袋子一袋子往家背 就相当于只用FileReader
  8. * 2、是用卡车一车车往仓库运 数组就相当于卡车
  9. * while((len = br.read(c))!=-1) //判断地里是否还有粮食
  10. * {
  11. *   bw.write(c, 0, len); //就相当于车循环拉粮食的动作,至于它具体是怎么运作的不用咱管。咱只管叫它运就行,也就是只管调用
  12. *
  13. *  }
  14. */
  15. //// 这是write的底层实现方法,有兴趣可以了解下
  16. public void write(String str, int off, int len) throws IOException {      
  17.         synchronized (lock) {
  18.             char cbuf[];
  19.             if (len <= writeBufferSize) {                  
  20.                 if (writeBuffer == null) {                                                
  21.                     writeBuffer = new char[writeBufferSize];
  22.                 }
  23.                 cbuf = writeBuffer;
  24.             } else {        
  25.                 cbuf = new char[len];
  26.             }
  27.             str.getChars(off, (off + len), cbuf, 0);   
  28.             write(cbuf, 0, len);                                                        // 再去往地里拉粮食
  29.         }
  30.     }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马