之前学习到的字符流可以处理字符数据,但是对于其他类型的数据就无能为力了,比如想要复制MP3文件怎么办呢?这个时候需要使用的是字节流类来处理。在API当中找到了两大类:InputStream、OutputStream,这是所有字节输入/输入流的所有类的超类。至于其具体使用方法,和字符流的做法是一样的,在此不复述。
在这里通过实现复制MP3文件的四种方法来体现字节流的具体使用方法:
/**
* @Title: byteStreamDemo.java
* @Package byteStream
* @author Shaw
* @date 2014年12月22日 下午8:16:34
* @version V1.0
*/
package byteStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @ClassName: byteStreamDemo
* @Description: TODO(尝试字节流复制文件的四种方法)
* @author Shaw
* @date 2014年12月22日 下午8:16:34
*
*/
public class byteStreamDemo {
/**
* @Title: main
* @Description: TODO(尝试字节流复制文件的四种方法)
* @param @param args 设定文件
* @return void 返回类型
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
copy_1();
copy_2();
copy_3();
copy_4();
}
private static void copy_4() throws IOException {
//最不要用的方法,电脑会死机的
FileInputStream fis = new FileInputStream("WangFei.mp3");
FileOutputStream fos = new FileOutputStream("WangFei_copy4.mp3");
int ch = 0;
while ((ch = fis.read())!= -1) {
fos.write(ch);
//bops.flush();
}
fos.close();
fis.close();
}
private static void copy_3() throws IOException {
// 自定义一个刚刚好一次读完的缓冲区,一次性读取完毕
//不建议使用,当需要复制的文件比较大的时候不合适
FileInputStream fis = new FileInputStream("WangFei.mp3");
FileOutputStream fos = new FileOutputStream("WangFei_copy3.mp3");
byte[] buf = new byte[fis.available()];
fis.read(buf);
fos.write(buf);
fos.close();
fis.close();
}
private static void copy_2() throws IOException {
// 使用缓冲区类,一个一个读;速度还好
FileInputStream fis = new FileInputStream("WangFei.mp3");
BufferedInputStream bips = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("WangFei_copy2.mp3");
BufferedOutputStream bops = new BufferedOutputStream(fos);
int ch = 0;
while ((ch = bips.read())!= -1) {
bops.write(ch);
//bops.flush();
}
bops.close();
bips.close();
}
public static void copy_1() throws IOException {
// 自定义缓冲区,建议使用
FileInputStream fis = new FileInputStream("WangFei.mp3");
FileOutputStream fos = new FileOutputStream("WangFei_copy.mp3");
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf))!= -1) {
fos.write(buf,0,len);
fos.flush();
}
fis.close();
fos.close();
}
}