4-5 字节缓冲流
8)BufferedInputStream&BufferedOutputStream这两个流类为IO提供了带缓冲区的操作,一般打开文件进行
写入或读取操作时,都会加上缓冲,这种流模式提高了io的性能
从应用程序中把数据放入文件,相当于将一缸水倒入另一个缸中:
FileOutputStream的write()方法相当于一滴一滴地把水转移过去
DataOutputStream的writeXXX()方法会方便一些,相当于一瓢一瓢地把水转移过去
BufferedOutputStream的write方法更方便,相当于一瓢一瓢水先放入桶中,再从桶中倒入到另一个缸中,性能提高
package com.yxt.haha;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutDemo1 {
/**
* @param args
*/
public static void main(String[] args)throws IOException {
// TODO Auto-generated method stub
//如果该文件不存在,则直接新建;如果存在,则删除后创建(如不想被清空掉则需要追加)
FileOutputStream out=new FileOutputStream("demo/out.dat");//构造方法后可以是文件名,文件路径或者接着追加到文件
//FileOutputStream out=new FileOutputStream("demo/out.dat",true);//如果不存在则创建;存在则追加内容
out.write('A');//写出了字符‘A’的低八位
out.write('B');//写出了字符‘B’的低八位
int a=10;//write只能写8位,那么写一个int需要写4次每次8位
out.write(a>>>24);
out.write(a>>>16);
out.write(a>>>8);
out.write(a);
byte[] gbk="中国".getBytes("gbk");
out.write(gbk);
out.close();
IOUtil.printHex("demo/out.dat");
}
//文件拷贝,字节批量读取(效率最高)
public static void copyFile(File srcFile,File desFile) throws IOException{
if(!srcFile.exists())
throw new IllegalArgumentException(srcFile+"文件不存在");
if(!srcFile.isFile())
throw new IllegalArgumentException(srcFile+"不是文件");
FileInputStream in=new FileInputStream(srcFile);
FileOutputStream out=new FileOutputStream(desFile);
byte[] buf=new byte[8*1024];
int b;
while((b=in.read(buf, 0, buf.length))!=-1){
out.write(buf,0,b);
out.flush();//最好加上
}
in.close();
out.close();
}
//进行文件的拷贝,利用带缓冲的字节流(效率较低)
public static void copyFileByBuffer(File srcFile,File desFile) throws IOException{
if(!srcFile.exists())
throw new IllegalArgumentException(srcFile+"文件不存在");
if(!srcFile.isFile())
throw new IllegalArgumentException(srcFile+"不是文件");
BufferedInputStream bin=new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bout=new BufferedOutputStream(new FileOutputStream(desFile));
int c;
while((c=bin.read())!=-1){
bout.write(c);
bout.flush();//刷新缓冲区
}
}
//单字节读取,不带缓冲进行拷贝(效率低)
public static void copyFileByByte(File srcFile,File desFile)throws IOException{
if(!srcFile.exists())
throw new IllegalArgumentException(srcFile+"文件不存在");
if(!srcFile.isFile())
throw new IllegalArgumentException(srcFile+"不是文件");
FileInputStream bin=new FileInputStream(srcFile);
FileOutputStream bout=new FileOutputStream(desFile);
int c;
while((c=bin.read())!=-1){
bout.write(c);
bout.flush();//刷新缓冲区
}
bin.close();
bout.close();
}
}