JAVA io流分为按方向可分为:输入流,输出流。按类型可分为:字节流,字符流。输入输出都是成对出现的。
今天就字节流讲下其中的几种读写方式,比较各种方式的效率(读写同一大小的文件,比较其所用时间)
一.FileInputStream,FileOutputStream的read()与write()方法,每次读一个字节。
public class Fileio {
//输入输出方法
public void readFile(String srcpath,String destpath){
//构造输入,输出流对象
try{
FileInputStream in=new FileInputStream(srcpath);
FileOutputStream out=new FileOutputStream(destpath);
// 从输入文件中读字节
long time = System.currentTimeMillis();//获取读之前当前时间的毫秒数
int i=in.read();
while(i!=-1){
out.write(i);
i=in.read();
}
long time1 = System.currentTimeMillis();//获取读写完之后当前时间的毫秒数
in.close();
out.close();
System.out.println("time="+(time1-time)); //输出时间差
System.out.println("文件复制完成---");
}catch(Exception e){
e.printStackTrace();
}
}
}
所用时间:
二..FileInputStream,FileOutputStream的read(byte[] b, int off, int len)与write(byte[] b, int off, int len)方法,每次读取一个缓冲数组,定义的数组大小为1024个字节。
public class Fileio {
//输入输出方法
public void readFile(String srcpath,String destpath){
//构造输入,输出流对象
byte[]buf=new byte[1024];
try{
FileInputStream in=new FileInputStream(srcpath);
FileOutputStream out=new FileOutputStream(destpath);
// 从输入文件中读字节
long time = System.currentTimeMillis();//获取读之前当前时间的毫秒数
int i=in.read(buf,0,buf.length);
while(i!=-1){
out.write(buf,0,i);
i=in.read(buf,0,buf.length);
}
long time1 = System.currentTimeMillis();//获取读写完之后当前时间的毫秒数
in.close();
out.close();
System.out.println("time="+(time1-time)); //输出时间差
System.out.println("文件复制完成---");
}catch(Exception e){
e.printStackTrace();
}
}
}
所用时间:
三.利用缓冲输入输出流 BufferedInputStream
,BufferedOutputStream d的read(),write()方法读取。
public class Fileio {
//输入输出方法
public void readFile(String srcpath,String destpath){
//构造输入,输出流对象
try{
FileInputStream in=new FileInputStream(srcpath);
FileOutputStream out=new FileOutputStream(destpath);
BufferedInputStream bis=new BufferedInputStream(in);
BufferedOutputStream bos=new BufferedOutputStream(out);
// 从输入文件中读字节
long time = System.currentTimeMillis();//获取读之前当前时间的毫秒数
int i=bis.read();
while(i!=-1){
bos.write(i);
i=bis.read();
}
long time1 = System.currentTimeMillis();//获取读写完之后当前时间的毫秒数
in.close();
out.close();
bis.close();
bos.close();
System.out.println("time="+(time1-time)); //输出时间差
System.out.println("文件复制完成---");
}catch(Exception e){
e.printStackTrace();
}
}
}
所用时间:
由以上几种方式我们可以知道在字节流中,几种不同的读写方式的效率是不同的,在我们编写程序时我们要充分利用其中的各种方式以达到最大效率,字符流与此类似。