字节流的小结
在字节流的中经常使用的就是图中所示。
1.何为输入流?何为输出流?
站在程序的角度看待输入流、输出流。
输出流:从程序中到文件的即为输出流
输入流:从文件到程序即为输入流
2.字节输入流
字节输入流的抽象基类:InputStream(就是所有字节输入流的爸爸,因为自身是抽象类,所以无法实现具体的方法没需要靠子类),常用的子类包含FileInputStream、BufferedInputStream.
(1)FileInputStream
主要通过read(),read(byte[]),read(byte[],int begin,int len)三种方法读取字节。
注意点1: 用 .read()方法时 值为-1 即为遍历完成
注意点2: 可以用byte[] b = new byte[1024] 数组 .read(b) 这样一次便能输入1024个字节,速率大大提升,1024值可以自行改变。
注意点3: len=bis.read(b) 所读取到的是有效字节数。
package com.dream.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Copy {
public static void main(String[] args) throws Exception {
/**
* 利用文件字节输入输出流进行复制
*/
FileInputStream fis = new FileInputStream("test.txt");
FileOutputStream fos = new FileOutputStream("copy.txt");
//中间变量
int read;
while((read = fis.read()) != -1){
fos.write(read);
}
fos.close();
fis.close();
}
}
2)BufferedInputstream(缓冲字节输入流)
使用和InputStream大同小异,只不过加了一个缓冲区,使得效率更加的高。
package com.dream.io2;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
- 利用缓冲字节流 对文件进行拷贝
- @author Administrator
*/
public class Copy {
public static void main(String[] args) throws Exception {
//1.创建流对象
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(“飞龙在天.avi”));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(“你是傻吊.avi”));
//2.传输数据
int len;
//一次传送1024个字节 使用的是write()
//创建byte数组
byte[] b = new byte[1024];
//len=bis.read(b) 所读取到的是有效字节数
while((len = bis.read(b)) !=-1){
//bos.write(b); 就会每次读取1024 而不是有效字节数 从而产生错误
bos.write(b, 0, len);
}
//3.关闭流
bis.close();
bos.close();
}
}