楼主的代码主要有两个问题,规范一下就好了。
首先最明显就是 --while(-1 != len);-- 这里的循环条件有问题:这里的len的值是1024,所以while的条件一直为真,一直会往2.mp3里写数据,这里不会停下。len的作用就是判断数组中的取到的元素个数,如果取到结尾会取回一个标记,len为-1(这里用的是缓冲区输出,这个速度很吓人的,不到4秒就忆经700M数据了)。
其次是flush()的位置。刷新应该放在while循环中,每取一个数组长度的数据我们就把缓冲写到目的地,虽然缓冲区的空间很大,可以满足一般需要求,但养成一个习惯总是好的。
【建议】如果是刚开始学习我觉得我们把老师的步骤记下来照着写,可以会有那么几句不懂什么意思,但写习惯之后自己就记住了,手熟了,等到知道经验多点之后再写到此处那些疑点就一下明了,而且还印象深刻。学习就是刚开始记住表象,等学到一定时候就可以从实质上来解说表象了。这里给楼主贴出来我自学时练习的代码和注释,看过之后应该能理解每一步的目的。
================================================================- public static void main(String[] args) throws IOException {
- BufferedInputStream bufin = new BufferedInputStream(//定义字节缓冲
- new FileInputStream("d:\\12.mp3"));
- BufferedOutputStream bufout = new BufferedOutputStream(
- new FileOutputStream("d:\\1111.mp3"));//定义字节缓冲输出
- byte[] by = new byte[bufin.available()];//定义长度为对象字节长度的数组
- int len = 0;//计数,读入数组的字节长度
- if((len = bufin.read(by)) != -1) {//一次全读进数组,这里用if条件,因为一次就可以全读取完,不然就用while
- bufout.write(by,0,len);//这里一次性输出相应长度的数组内容,如果数组内容是1024的大小,那么就用while来多次取多次输出
- bufout.flush();//刷新保存
- }
- bufout.close();//关闭流
- bufin.close();
- }
- }
复制代码 |