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,可见大大加速了字节流所需的时间。