java基础巩固之IO(二)

      接上一篇,在实际的应用中,一般很少用到节点流,而是用缓冲流(一种处理流)来处理相应的数据。主要原因是缓冲流实现了对节点流的加速处理。使用缓冲流可以更快速的实现对数据的操作,何乐而不为呢。

   这里我们提一下整个IO类的的主要对应关系。如下表:

抽象基类 节点流 缓冲流(处理流的一种)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
 缓冲流:

   其实基本上与节点流差不多,只是多了一道工序:把节点流作为参数来创建缓冲流。所以用缓冲流来实现文件操作的步骤大致如下几步:

  1.      创建File对象
  2.     创建节点流
  3.     创建缓冲流
  4.     进行操作
  5.     关闭缓冲流(缓冲流会自动关闭对应的节点流)
  所以对应的文件拷贝的函数可以用如下代码实现:

  

public void BufferCopy(String src,String dest)
	{
		File f1=null;
		File f2=null;
		FileInputStream fis=null;
		FileOutputStream fos=null;
		BufferedInputStream bis=null;
		BufferedOutputStream bos=null;
		try {
			//第一步:创建File文件
			f1=new File(src);
			f2=new File(dest);
			//第二部,创建流
			 fis=new FileInputStream(f1);
			 fos=new FileOutputStream(f2);
			//第三部,创建缓冲流
			bis=new BufferedInputStream(fis);
			 bos=new BufferedOutputStream(fos);
			//对缓冲流操作
			byte[] b=new byte[50];
			int len;
			while((len=bis.read(b))!=-1)
			{
				bos.write(b, 0, len);
				bos.flush();
			}
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		finally
		{
			//close
			if(bos!=null)
			{
				try {
					bos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(bis!=null)
			{
				try {
					bis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
   这里是使用BufferedInputStream和BufferedOutputStream来实现对各种文件进行操作,对应的字符型的缓冲流的BufferedReader和BufferedWriter流程基本上一致。只是操作while的时候不太一致

          String s=null;
	  while((s=br.readLine())!=null){
	    bw.writer(s);
	    bw.newLine();
	    bw.flush();}
因为是字符的操作,这里可以一行一行的读数据和写数据。

注意到一点,缓冲流的谢操作需要一个flush()刷新和newLine()来进行下一行的操作。基本上的操作流程都差不多。

你可能感兴趣的:(java基础)