IO流简单总结


IO流体系结构(不足之处、还望请教 )
a、要想了解IO流体系就必须知道Stream流的概念:
   java中将输入输出抽象类叫做流的概念、并提供了相应的实现类;流式文件与外界进行数据交换的通道、其中输出流是我们在程序中从某个地方读取数据时使用、输出流是我们将数据送到某个地方时使用。


b、流的分类:
   按方向分:输入流(InputStream)、输出流(OutputStream)
   按性质分:基础字节流(原始流)即每次读一个字节、而且是直接连接到输入源的流。InputStream、OutputStream。
             过滤流(节点流)用来包装基础流以提供更好的特性、并不直接连接到数据源;常用的有:BufferedInputStream,BufferedOutputStream;
             基于具体数据类型的流:从流中读取指定类型的数据、则使用DataInput、DataOutput接口的子类如:DataInputStream、DataOutputStream。
             基于对象读写:一种强大功能流、即对象的输入输出流;ObjectInput/ObjectOutput接口的子类如:ObjectInputStream等。


c、流中定义的方法:
      close()
          关闭此输入流并释放与该流关联的所有系统资源。
      read()
          从输入流中读取数据的下一个字节。
      flush()
          刷新此输出流并强制写出所有缓冲的输出字节。
      write(int b)
          将指定的字节写入此输出流。


d、下面我们来详细介绍常用的流:
    1、用File流拷贝文件:

//File流拷贝文件
	public long copyFile(String srcName,String bakName){
		long start=System.currentTimeMillis();
		try {
			java.io.InputStream ins=new java.io.FileInputStream(srcName);
			// 实例化一个输出流的对象
			OutputStream os = new FileOutputStream(bakName);
			//获取文件长度
			try {
				int length=ins.available();
				// 根据文件字节的长度,来定义一个byte数组
				byte array[] = new byte[length];
				for(int i=0;i<length;i++){
					byte b=(byte)ins.read();
					//将这个字节写入入流中
					os.write(b);
					array[i]=b;
				}
				// 将byte转换为字符串
				String str = new String(array);
				// 输出
				System.out.println("文件内容是:\n" + str);
				os.close();
				ins.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		long end=System.currentTimeMillis();
		long result=end-start;
		return result;
	}


使用缓冲流复制文件

//缓冲流拷贝文件
	public long copyFile3(String srcName,String bakName) throws IOException{
		long start=System.currentTimeMillis();
		        //创建从源文件来的输入流
				InputStream ins=new java.io.FileInputStream(srcName);
				//构造输入缓冲流
				BufferedInputStream  bis=new BufferedInputStream(ins);
				//构造输出流
				OutputStream out=new FileOutputStream(bakName);
				//构造缓冲输出流对象
				BufferedOutputStream bos=new BufferedOutputStream(out);
				int i = 0;
				// 循环读取文件内容,只要读取的值不是-1就表示还未到文件的末尾
				while ((i = bis.read()) != -1) {
					// 将i写入到文件中
					bos.write(i);
				}
				bos.flush();//强制将缓冲中的内容写入到文件中
				bos.close();
				out.close();
				bis.close();
				ins.close();
				long end=System.currentTimeMillis();
				long time=end-start;
				return time;
	}


而Data流的使用也和缓冲流的使用一样、建立在InputStream和OutputStream流对象的基础上。


通过使用使用不同的流对象、我们可以发现使用缓冲流和没使用缓冲流的速度相差非常大、、、

你可能感兴趣的:(IO流)