字节输入输出流,字符输入输出流,转换流,字节缓冲流

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

猜你喜欢

转载自www.cnblogs.com/zhangrui0328/p/9214117.html