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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在自定义的MyBufferedStream类中进行判断的if···else语句,我认为去掉else这部分判断也行啊。
import java.io.*;
public class FileReaderDemo11 {
        public static void main(String[] args)throws IOException{
                MyBufferedStream mybuf = new MyBufferedStream(new FileInputStream("D:\\歌词\\新Atomic Kitten-Nothing In The World.mp3"));
                BufferedOutputStream bfo = new BufferedOutputStream(new FileOutputStream("C:\\hah.mp3"));
                int ch;
                while((ch=mybuf.myRead())!=-1){
                        bfo.write((char)ch);
                }
                mybuf.myClose();
                bfo.close();
        }

}
class MyBufferedStream{
        private FileInputStream fs;
        private int num = 0, pos =0;
        private byte[] ch = new byte[1024];
        MyBufferedStream(FileInputStream fs){
                this.fs = fs;
        }
        public int myRead() throws IOException{
                 if(num==0){
                        num =fs.read(ch);
                        if(num<0){
                                return -1;
                        }
                        pos = 0;
                        byte b = ch[pos];
                        pos++;
                        num--;
                        return b&0xff;
                       
                }else if(num >0){
                        byte b = ch[pos];
                        pos++;
                        num--;
                        return b&0xff;
                                               
                }//该红色区域能否去除????
       
             return -1;
        }
        public void myClose()throws IOException{
                fs.close();
        }
}

2 个回复

倒序浏览
本帖最后由 吴璞玉 于 2012-2-21 20:24 编辑

myread()方法中的num代表了读入缓冲区的字节总数,当它等于零时说明字节数组中没有读入数据,所以运行num =fs.read(ch);
但是定义的是一个1024大小的字节数组,传送mp3这样的数据时是一个数组装不下的,所以会不停的读取。而当读满时就该把数组数据写到byte b,指针重新指到数组头中,而当已经到达文件末尾而没有更多的数据,则返回 -1才有会用到num<0的判断
好吧,我只是想说下这个判断的原理,换句话说就是不可以,去掉之后虽然没有错误产生但是你复制过去的文件只有一个字节大小
回复 使用道具 举报
吴璞玉 发表于 2012-2-21 20:12
myread()方法中的num代表了读入缓冲区的字节总数,当它等于零时说明字节数组中没有读入数据,所以运行num = ...

你搞错了,我只想知道标记红色的部分能否去除???
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马