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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是我写的代码

import java.io.*;
//MP3复制

//先读后写

//源:输入流/读
//目标:输出流/写

//MP3:字节流


//设备:硬盘(文件)

//所以要用到的类是:
// FileInputStream
// FileOutputStream




public class MP3CopyDemo {
       
        public static void main(String[] args) throws IOException
        {
                // TODO 自动生成的方法存根
                FileInputStream fis =  new FileInputStream(new File("C:\\0.mkv"));
                FileOutputStream fos = new FileOutputStream(new File("C:\\2.mkv"));
                int len=0;
                byte[] by = new byte[1024];
                while((len=fis.read(by))!=0)
                {
                        fos.write(by, 0, len);
                }
                fos.close();
                fis.close();
        }
}

正常运行,实现了MP3文件复制。
可是,却报了异常。

Exception in thread "main" java.lang.IndexOutOfBoundsException
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(Unknown Source)
        at MP3CopyDemo.main(MP3CopyDemo.java:32)

怎么回事?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

5 个回复

倒序浏览
知道了,输入流对象fis读取不到数据时,返回值是-1而不是0!
回复 使用道具 举报
楼上说的对,还有就是每次写完数据,刷新一下缓冲区,fw.flush()
回复 使用道具 举报
过路人 发表于 2015-5-17 09:40
楼上说的对,还有就是每次写完数据,刷新一下缓冲区,fw.flush()

谢谢!不过一般输出到控制台才刷新吧,输出到硬盘好像不怎么刷新的。
回复 使用道具 举报
.......while((len=fis.read(by))!=0)   0改成-1
楼上的  他没用到缓冲区,用的是字节流 ,字节流貌似是自动刷新的~~
用下缓冲区可以提高效率~~
回复 使用道具 举报
……………………
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马