1.字节输入输出流是通过read字节和write字节的方式来完成对文件等的读取和写入,它的read和write方法同时也支持byte数组,下面是通过字节数组输入输出的复制文件的方法。其中计算一下整个过程的时间,经计算为7秒。
public static void method1() throws IOException{
long x=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("C:\G\软件包\eclipse.zip");
FileOutputStream fos=new FileOutputStream("C:\Users\Rui\Desktop\新建文件夹\eclipse.zip");
byte[] bytes=new byte[1024];
int len=0;
while((len=fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
fos.close();
fis.close();
long y=System.currentTimeMillis();
System.out.println((y-x)/1000);
}
2.字符输入输出流,是通过读取字符和写入字符的方式来完成对文件等的读取和写入,它的read和write方法支持char数组,write支持字符串,但是read不支持。下面是一个通过字符流来复制txt文件的例子。
public static void method2() throws IOException{
FileReader fr=new FileReader("C:\Users\Rui\Desktop\课件\作业\61作业.txt");
FileWriter fw=new FileWriter("C:\Users\Rui\Desktop\新建文件夹\61作业.txt");
int len=0;
while((len=fr.read())!=-1){
fw.write(len);
}
fw.flush();
fw.close();
fr.close();
}
注:字符流不要忘了刷新缓存,否则文字不会复制进去。
3.转换流为在读写过程中转换utf-8与gdk编码格式的方法,它可以复制utf-8编码的文件,下面是一个例子。
public static void method3() throws IOException{ FileInputStream fis=new FileInputStream("C:\Users\Rui\Desktop\read\utf.txt"); FileOutputStream fos=new FileOutputStream("C:\Users\Rui\Desktop\新建文件夹\utf.txt"); InputStreamReader isr=new InputStreamReader(fis,"utf8"); OutputStreamWriter osw=new OutputStreamWriter(fos,"utf8"); int len=0; char[] ch=new char[1024]; while((len=isr.read(ch))!=-1){ osw.write(ch, 0, len); } osw.flush(); osw.close(); isr.close(); }
注:如果关闭了转换流的对象,则嵌入的字节流对象也会跟着关闭。转换流是字符流的父类,其也遵循不刷新缓存则无法写入的规则。
4.字节缓存流是为了加速字节流而出现的一种方法,它的格式与转换流类似,也是嵌套的形式。下面是一个例子,在这个例子中我们计算一下所需的时间。
public static void method4() throws IOException{
long x=System.currentTimeMillis();
FileInputStream fis=new FileInputStream("C:\G\软件包\eclipse.zip");
BufferedInputStream bis=new BufferedInputStream(fis);
FileOutputStream fos=new FileOutputStream("C:\Users\Rui\Desktop\新建文件夹\eclipse.zip");
BufferedOutputStream bos=new BufferedOutputStream(fos);
byte[] bytes=new byte[1024];
int len=0;
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bos.flush();
bos.close();
bis.close();
long y=System.currentTimeMillis();
System.out.println((y-x)/1000);
}
经计算,时间仅需1s,可见大大加速了字节流所需的时间。