老师,这里使用BufferedInputStream和BufferedOutputStream定义的处理流,是不是与自定义byte[]数组缓冲区然后read(byte[] b)并不一样?
我的理解:
1)处理流仍然是一个字节一个字节从数据源中读取数据,只是将这些字节缓存在处理流定义的字节数组中,之后等满了以后(达到8192个字节)再读入到程序中;
2)而自定义的缓冲区是一次直接从数据源中读取多个字节(比如定义的1024个字节数组)到程序中。
处理小文件的时候,自定义的会不会效率更高一下?
处理大文件的时候使用那个更好一些?
两个结合在一块使用适用吗?(比如第二段代码中的适用)
第一段代码:
package cn.ljp;
import java.io.*;
public class TestBufferedInputStream02 {
public static void main(String[] args) {
// 1) 定义字节流和处理流
InputStream fis = null;
InputStream fib = null;
OutputStream fos = null;
OutputStream fob = null;
try{
fis = new FileInputStream("f:/a.png");
fib = new BufferedInputStream(fis);
fos = new FileOutputStream("f:/aa.png");
fob = new BufferedOutputStream(fos);
int emp = 0;
long start = System.currentTimeMillis();
while((emp = fib.read()) != -1){
System.out.println(emp);
fob.write(emp);
}
fob.flush();
long stop = System.currentTimeMillis();
System.out.println("花费时间" + (stop - start) + "毫秒");
}catch(Exception e){
e.printStackTrace();
}finally {
try{
if(fib != null)
fib.close();
if(fis != null)
fis.close();
if(fob != null)
fob.close();
if(fos != null)
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
第二段代码:
package cn.ljp;
import java.io.*;
public class TestBufferedInputStream {
public static void main(String[] args) {
// 1) 定义字节流和处理流
InputStream fis = null;
InputStream fib = null;
OutputStream fos = null;
OutputStream fob = null;
try{
fis = new FileInputStream("f:/a.png");
fib = new BufferedInputStream(fis);
fos = new FileOutputStream("f:/aa.png");
fob = new BufferedOutputStream(fos);
byte[] buff = new byte[1204];
int emp = 0;
long start = System.currentTimeMillis();
while((emp = fib.read(buff)) != -1){
System.out.println(emp);
fob.write(buff,0,emp);
}
fob.flush();
long stop = System.currentTimeMillis();
System.out.println("花费时间" + (stop - start) + "毫秒");
}catch(Exception e){
e.printStackTrace();
}finally {
try{
if(fib != null)
fib.close();
if(fis != null)
fis.close();
if(fob != null)
fob.close();
if(fos != null)
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}