黑马程序员技术交流社区
标题:
自定义的BufferedInputStream类,if···else语句有些问题。
[打印本页]
作者:
魏腾飞
时间:
2012-2-21 19:02
标题:
自定义的BufferedInputStream类,if···else语句有些问题。
在自定义的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();
}
}
作者:
吴璞玉
时间:
2012-2-21 20:12
本帖最后由 吴璞玉 于 2012-2-21 20:24 编辑
myread()方法中的num代表了读入缓冲区的字节总数,当它等于零时说明字节数组中没有读入数据,所以运行num =fs.read(ch);
但是定义的是一个1024大小的字节数组,传送mp3这样的数据时是一个数组装不下的,所以会不停的读取。而当读满时就该把数组数据写到byte b,指针重新指到数组头中,而当已经到达文件末尾而没有更多的数据,则返回 -1才有会用到num<0的判断
好吧,我只是想说下这个判断的原理,换句话说就是不可以,去掉之后虽然没有错误产生但是你复制过去的文件只有一个字节大小
作者:
魏腾飞
时间:
2012-2-21 20:13
吴璞玉 发表于 2012-2-21 20:12
myread()方法中的num代表了读入缓冲区的字节总数,当它等于零时说明字节数组中没有读入数据,所以运行num = ...
你搞错了,我只想知道标记红色的部分能否去除???
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2