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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 顾传文 中级黑马   /  2013-2-27 11:48  /  1242 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自定义了一个字节流缓冲区,为什么没有拷贝到数据呢?
class Test {
        public static void main(String[] args) throws Exception{
                long beginTime = System.currentTimeMillis();
                MyBufferedInputStream bufips = new MyBufferedInputStream(new FileInputStream("D:\\我的文档\\My Pictures\\large_Psty_82854o204237.jpg"));
                BufferedOutputStream bufops = new BufferedOutputStream(new FileOutputStream("D:\\我的文档\\My Pictures\\copy.jpg"));
                int byt = 0;
                while((byt=bufips.read())!=-1){
                        bufops.write(byt);
                }
                bufips.close();
                bufops.close();
                long endTime = System.currentTimeMillis();
                System.out.println(endTime-beginTime);
        }
}  
class MyBufferedInputStream{
        private InputStream is;
        private byte[] buffer = new byte[1024];
        private int pos = 0,count = 0;
        MyBufferedInputStream(InputStream is){
                this.is = is;
        }
        //一个字节一个字节,从缓冲区(字节数据)获取。
        public int read() throws IOException{
                /*
                 * 通过is对象读取硬盘上的数据,并存储到buffer中。
                 * 当缓冲区数据被读完之后,再从硬盘读取数据。
                 * 当读到文件的末尾返回-1。
                 */
                if(count==0){
                        count = is.read(buffer);
                        //读取到文件的末尾
                        if(count<0){
                                return -1;
                        }
                        pos = 0;
                        byte b = buffer[pos];
                        count --;
                        pos ++;
                        return b;
                }else if(count>0){
                        byte b = buffer[pos];
                        count --;
                        pos ++;
                        return b;
                }
                return -1;
        }
        public void close() throws IOException{
                is.close();
        }
}

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马