对java中FileInputStream、BufferInputStream的理解
在计算机中文件是byte 、byte、byte地存储
FileInputStream在读取文件的时候,就是一个一个byte地读取,
DataInputStream则是在FileInputStream的一个轻量级的包装类,
BufferInputStream则是自带缓冲区,默认缓冲区大小为8X1024
通俗地讲就是:
FileInputStream在读取文件的时候,一滴一滴地把水从一个缸复制到另外一个缸
DataInputStream则是一瓢一瓢地把水从一个缸复制到另外一个缸
这个是FileInputStream
/**
* @author Administrator
*BufferInputStream
*/
public static void printHexByBuffer(String fileName)throws IOException{
BufferedInputStream in=new BufferedInputStream(new FileInputStream(fileName),8*1024);
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(f2),8*1024);
int c=0;
long start = System.currentTimeMillis();//获取当前时间
while((c=in.read())!=-1){
out.write(c);
out.flush();//刷新缓冲区
}
long end=System.currentTimeMillis();
System.out.println(end-start);//2MB 数据7000毫秒
out.close();
in.close();;
}
另外还有对文件的批量处理,利用一个字节数组byte【】存储,改方法最快是BufferInputStream
/**
* @author Administrator
*FileInputStream
*/
public static void printHexByByteArray(String fileName)throws IOException{
FileInputStream in = new FileInputStream(fileName);
FileOutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[8 * 1024];
int bytes = 0;
int j = 1;
long start = System.currentTimeMillis();
while((bytes = in.read(buf,0,buf.length))!=-1){
out.write(buf);
}
long end = System.currentTimeMillis();
System.out.println(end-start+"毫秒");//2MB 数据7毫秒
in.close();
out.close();
}
在计算机中文件是byte 、byte、byte地存储
FileInputStream在读取文件的时候,就是一个一个byte地读取,
DataInputStream则是在FileInputStream的一个轻量级的包装类,
BufferInputStream则是自带缓冲区,默认缓冲区大小为8X1024
通俗地讲就是:
FileInputStream在读取文件的时候,一滴一滴地把水从一个缸复制到另外一个缸
DataInputStream则是一瓢一瓢地把水从一个缸复制到另外一个缸
这个是FileInputStream
/**
* @author Administrator
*BufferInputStream
*/
public static void printHexByBuffer(String fileName)throws IOException{
BufferedInputStream in=new BufferedInputStream(new FileInputStream(fileName),8*1024);
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(f2),8*1024);
int c=0;
long start = System.currentTimeMillis();//获取当前时间
while((c=in.read())!=-1){
out.write(c);
out.flush();//刷新缓冲区
}
long end=System.currentTimeMillis();
System.out.println(end-start);//2MB 数据7000毫秒
out.close();
in.close();;
}
另外还有对文件的批量处理,利用一个字节数组byte【】存储,改方法最快是BufferInputStream
/**
* @author Administrator
*FileInputStream
*/
public static void printHexByByteArray(String fileName)throws IOException{
FileInputStream in = new FileInputStream(fileName);
FileOutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[8 * 1024];
int bytes = 0;
int j = 1;
long start = System.currentTimeMillis();
while((bytes = in.read(buf,0,buf.length))!=-1){
out.write(buf);
}
long end = System.currentTimeMillis();
System.out.println(end-start+"毫秒");//2MB 数据7毫秒
in.close();
out.close();
}