字节流读取数据两种方式比较
█ 一次读取一个字节
█ 一次读取一个字节数组
☞每次可以读取多个数据,提高了操作效率
public class CopyDemo {
//第一步:将1.txt中的内容读入到内存 FileInputStream
//第二步:将内存中读入的数据读入到2.txt FileOutputStream
//使用字节流来copy东西不会出现乱码,因为是把所有东西照搬过去,没有拿出来解析
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("我的滑板鞋.mp4"); //任何文件格式都可以拷贝
FileOutputStream fos = new FileOutputStream("kaobei.mp4");
|
//方法一: 效率低下,一次一个字节
/* int b = 0;
while((b = fis.read()) != -1){
fos.write(b);
}*/
//方法二: 效率高,一次整个数组
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read(bytes)) != -1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
}
|
字节缓冲流 ( 包装流,加入了一些缓冲区 8092 byte )
█ 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的情况,所以提供了字节缓冲区流
█ 字节缓冲输出流
☞BufferedOutputStream
BufferedInputStream(InputStream in); //缓冲区大小默认是8192
创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
BufferedInputStream(InputStream in, int size);
创建具有指定缓冲区大小的
█ 字节缓冲输入流
☞BufferedInputStream
BufferedOutputStream(OutputStream out);
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size);
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。
public class BufferTestMain {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("我的滑板鞋.mp4");
// 这样的fis不带缓冲区
BufferedInputStream bfis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("kaobei.mp4");
BufferedOutputStream bfos = new BufferedOutputStream(fos);
|
// 方法一:
/* int b = 0;
while ((b = bfis.read()) != -1) {
//看上去是一个字节一个字节的读,其实系统实现是一次读 8192 个字节到缓冲区
bfos.write(b);
}*/
// 方法二:更快,缓冲区自带一个8192缓冲区,自己还定义了一个1024的缓冲区
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bfis.read(bytes)) != -1) {
bfos.write(bytes, 0, len);
}
}
}
|