使用带有缓冲的字节读取BufferedInputStream、 BufferedOutputStream
package TestSream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class ReadByteStream {
public static void main(String[] args) {
try {
//以Stream结尾的都是使用字节流
FileInputStream fis=new FileInputStream("Test.txt");
//只要 字节的数组数 不大于文件大小即可
byte input[]=new byte[40];
//使用字节数组读取
fis.read(input);
//当数据写完后,一定要将输入输出流关闭,后开的先关闭,先开的后关闭
fis.close();
//创建字符集的时候默认使用当前的字符集作为解码方式,由于当前使用的字符集使用的是UTF-8,所以此时不会乱码
//如果此时指定字符集为GBK,那就会出现乱码new String(input,"GBK")
String inputString=new String(input);
System.out.println(inputString);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用FileOutputStream写入数据
package TestSream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ReadbyBufferedByteStream {
public static void main(String[] args) {
//此时要显示出带有缓冲的字节流效率,我们在项目下放进一个视频文件
try {
//标准的字节流
FileInputStream fis=new FileInputStream("hello.qlv");
//把FileInputStream包装成带有缓冲的BufferedInputStream,为它指定一个输入流,也就是fis
//默认BufferedInputStream bis=new BufferedInputStream(fos,20000);
//此处可以指定缓冲区的大小,指定大小根据文件大小而定,但是要大于数组指定的大小
BufferedInputStream bis=new BufferedInputStream(fis,20000);
FileOutputStream fos=new FileOutputStream("hello_new.qlv");
BufferedOutputStream bos=new BufferedOutputStream(fos);
//每次读取2000个字节,大型文件对应的数组大一些,小型文件对应的小一些
byte input[]=new byte[2000];
int count=0;
//1970年到现在当前时间做经过的毫秒数
//读取前记录时间
long before=System.currentTimeMillis();
while(bis.read(input)!=-1){
//每次读取的话网count+1
count++;
bos.write(input);
}
bos.close();
fos.close();
bis.close();
fis.close();
//读取后再计算一次
System.out.println(System.currentTimeMillis()-before+"ms");
System.out.println("读取了 :"+count+"次");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
16ms
读取了 :3905次