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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

CitySe

中级黑马

  • 黑马币:40

  • 帖子:12

  • 精华:0

© CitySe 中级黑马   /  2014-9-14 01:05  /  858 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferIODemo {

        public static void main(String[] args) throws IOException {
                copyTxtDemo();
        }

        public static void copyTxtDemo() throws IOException {
                //创建缓冲区对象。
                FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\API.CHM");
                FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\A.CHM");
                BufferedInputStream fils = new BufferedInputStream(fis);
                BufferedOutputStream fosl = new BufferedOutputStream(fos);
                byte[] by = new byte[1024];
                int len = 0;
                while((len=fils.read(by))!=-1){
                        fosl.write(by,0,len);
                        fosl.flush();
                }
                fis.close();
                fos.close();
        }

}

3 个回复

倒序浏览
我想问一下,fils.read(by)这里,是以数组的形式在文件里面读吗?就是一次读1024个还是读了之后存进数组里面,谢谢了
回复 使用道具 举报
本帖最后由 孤鸢 于 2014-9-14 10:36 编辑

首先肯定的是,数据肯定是一个字节一个字节的读,而read()内部也是封装了循环,要么读到数据结尾(文件大小不足byte[]),要么就给byte[]数组装满,而write对应的内部也封装了一个循环,给byte[]数组数据写完,所以相对于外面的while循环,就是先给byte[]中的数据写完,才循环一次,感觉好像就是一次性写完一样,你可以设置一个计数器,在f.write(buf,0,len)之前count++,然后找一个大于1K的文件(因为你的数组定义的是 1k),会发现写了 文件大小/k 的整数次。
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马