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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.*;

class MyBufferedInputStream
{
        private FileInputStream in;
        private int count=0,pose=0;
        private byte [] buf=new byte[1024];
       
        MyBufferedInputStream(FileInputStream in)
        {
                this.in=in;
        }
       
        public int myRead() throws IOException
        {
                if(count==0)
                {
                        count=in.read(buf);
                        System.out.println(count);
                        if(count<0)
                        {
                                //System.out.println("over");
                                return -1;
                        }

                        pose=0;//让数组指针回到初始位置!
                        byte b=buf[pose];
                        count--;
                        pose++;
                        return b&0xff;               
                }
                //else
                if(count>0)
                {
                        byte b=buf[pose];
                        pose++;
                        count--;
                       
                        return b&0xff;
                }
                return -1;
        }
        public void myClose() throws IOException
        {
                in.close();
        }

}
class MyBufferedInputStreamCopyMp3
{
        public static void main(String[] args) throws IOException
        {
                Long start=System.currentTimeMillis();
               
                copyMp3();

                Long end=System.currentTimeMillis();
                System.out.println("拷贝MP3用时:"+(end-start)+"毫秒");
               
        }
        public static void copyMp3()throws IOException
        {
                BufferedOutputStream bos=
                        new BufferedOutputStream(new FileOutputStream("C:\\Users\\dell\\Desktop\\我是传奇_copy.mp3"));
                MyBufferedInputStream mybis=
                        new MyBufferedInputStream(new FileInputStream("C:\\Users\\dell\\Desktop\\我是传奇_copy.mp3"));
       
                int by=0;
                //System.out.println(mybis.myRead());
                while((by=mybis.myRead())!=-1)
                {
                        bos.write(by);
                }

                mybis.myClose();
                bos.close();

        }
}

运行没有结果:读不出数据,懂的朋友指点一下!

6 个回复

倒序浏览
你写的代码我帮你打印了一下是可以打印拷贝MP3用时毫秒数,但是由于你的读取流和写入流是一致的,字符流的潜规则是:写入流创建对象时,对应的文件会被创建到指定的目录下,如果 该目录下已经有同名文件,那么原有的文件将被覆盖。

点评

来学习下,受益了  发表于 2014-6-4 10:42
回复 使用道具 举报
BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream("C:\\Users\\dell\\Desktop\\我是传奇_copy.mp3"));楼主应该将这句代码的名字改一下,不能和原文件同名。通过查阅API文档知道:实例化BufferedOutputStream的时候,会创建一个向具有指定名称的文件中写入数据的输出文件流。创建一个新 FileDescriptor 对象来表示此文件连接。所以在创建一个新的文件名字为“我是传奇_copy.mp3”的时候,会把你原来的文件覆盖了。所以导致运行结果就是一个空的mp3文件。
回复 使用道具 举报
心灵的微幸福 发表于 2014-6-4 10:09
你写的代码我帮你打印了一下是可以打印拷贝MP3用时毫秒数,但是由于你的读取流和写入流是一致的,字符流的 ...

多谢哈!找了2个小时没找到问题,都是粗心惹的祸!
回复 使用道具 举报
123_yaya 发表于 2014-6-4 11:14
BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream("C:\\Users\\dell\\Desktop\\ ...

学习了!多谢啦!!
回复 使用道具 举报
都是大神哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马