黑马程序员技术交流社区
标题:
求教!!!模拟 缓冲区 拷贝音频文件 问题
[打印本页]
作者:
彭飞
时间:
2014-5-25 12:16
标题:
求教!!!模拟 缓冲区 拷贝音频文件 问题
本帖最后由 彭飞 于 2014-5-27 08:36 编辑
今天看毕老师的视频【IO-19天-】【自定义字节流的缓冲区-read和write的特点】
其实就是 模拟一个
BufferInputoutStream
增强缓冲流
这个功能不算难,代码很快就敲完了,然后出现老师演示的情况
出现拷贝0字节的文件。然后我也写了一句输出语句
System.out.println("第一个字节:"+bufis.myRead());
//【1】
没返回 -1
而是 0 或者
返回 73
然后又加上了
return b&255;
和
return b&0xff;
语句,并把数组*4
研究了好久
始终是这个问题,我尝试了,MP3,mov, 都是如此。
很纳闷!!
并且反复对照代码,没有错误。
最后又将代码放到Myeclipse 中,结果依旧。
还请大家帮我看看错误在那里
贴上代码:
/**
拷贝一个音频文件-通过字节流的缓冲区
模拟一个缓冲区,对音频文件的拷贝。
*/
import java.io.*;
class MoniCopyMp391
{
public static void main(String[] args) throws IOException
{
//为了看拷贝效率,对拷贝时间进行统计。
long start = System.currentTimeMillis();
copy_2();
long end = System.currentTimeMillis();
System.out.println(end-start+"毫秒");
/*
通过copy 使用模拟的读取缓冲区方法,我们发现拷贝了,但是居然没有数据!
通过加入【1】我们发现:
*/
}
public static void copy_2()throws IOException{
MBufInStr bufis = new MBufInStr(new FileInputStream("E:\\1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("E:\\11.mp3"));
int by = 0;
System.out.println("第一个字节:"+bufis.myRead());//【1】
while((by=bufis.myRead())!=-1){
bufos.write(by);
}
bufos.close();
bufis.mClose();
}
}
//模拟 InputStream 字节读取流 只需要模拟覆盖父类2个方法即可。
class MBufInStr{
private InputStream in;
private byte [] buf = new byte [1024*4];//自定义缓冲区的数组
private int pos=0,count=0;// 指针,计数器
MBufInStr(InputStream in ){
this.in = in ;
}
//0
public int myRead()throws IOException{
if(count==0){
count = in.read(buf);//1-0、读一个存一个到缓冲区数组中,并用计数器统计
if(count<0){//4、如果个数小于0 也就是-1 也就是没有数据的时候。
return -1;
}
pos = 0;//1-1、初始化指针。
byte b = buf[pos];//1-2、创建 char b接收指针指向数组中被存如的数据
count--;//1-4、取出一个,就少减少一个。
pos++;//1-5、而指针指向下一个,
//1-3、返回这个b
return b&255;
//2、这个时数组中还有元素未被取出,当再次使用myRead()方法又会存入数据,所以加上一个if(count==0)条件。
}
else if(count>0){//3、不为0 就是有数据,那么就继续取出。
byte b =buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
//0 关闭方法
public void mClose()throws IOException{
in.close();
}
}
复制代码
作者:
lzhuas
时间:
2014-5-25 12:41
经测试,没问题啊,在我电脑上可以复制成功啊,不知道你什么问题了。。。
作者:
彭飞
时间:
2014-5-25 15:33
lzhuas 发表于 2014-5-25 12:41
经测试,没问题啊,在我电脑上可以复制成功啊,不知道你什么问题了。。。 ...
回来我重启了一下,还是如此。 挺奇怪了。。。。
作者:
彭飞
时间:
2014-5-25 16:18
问题已经解决。
刚刚看了底层源代码。
总算是知道为什马了。哇咔咔。 太无语了。尼玛。
作者:
彭飞
时间:
2014-5-25 16:22
占缓关闭该问题,看看有木有同学能看出来。哈哈。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2