IO体系结构小结

                          IO体系结构
嘿嘿,是不是复制文件就是这个原理?

1.流的概念
输入和输出的抽像,类似一个水管,从一个地方流入数据,从另外一个地方输出数据(我个人比喻为:从耳朵听进(从别人那得到信息),从嘴里说出(自己的想法))

2.流的分类
按方向分:输入流(InputStream)和输出流(OutputStream)
按性质分:
a.基础字节流(原始流):(InputStream)和(OutputStream)是按最小单位读取(byte),直接连接到输入流
b.过滤流(节点流):BufferedInputStream 和BufferedOutputStream
c.基于具体数据类型的流:DateInputStream和 DateOutputStream
d.基于对象读写:ObjectOutputStream

3.InputStream是一个抽象类,不能直接实例化
  FileInputStream是InputStream的子类
  BufferedInputStream ,DateInputStream是FilterInputStream的子类

4.(1) InputStream中的重要方法
    int available():读取的字节长度
    void close():关闭输入流
    int read():读取字节,虽然是int类型,但实际上读取的是byte

  (2) OutputStreamde 调用方法
    void close():关闭输出流
    void flush():强制输出数据
    void write(int b):像流中写入一个byte值

5.(1)FileInputStream:从文件中读取数据
       构造方法:
             FileInputStream(File file) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

             FileInputStream(String name) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

示例代码:
package IO体系结构;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class BaseIO {

	public String readFile2String(String filename)throws java.io.IOException{
		//构造输入流对象,作为一个Inputstream对象使用
		InputStream ins = new FileInputStream(filename);
		//通过文件对象创建输入流
		//File srcFile = new File(filename);
		//inputStream ins = new FileInputStream(srcFile);
		
		//根据流中的字节长度,创建一个byte数组,保存读到的数据
		byte[] contentByte = new byte[ins.available()];
		//将流中的数据读到数组中
		ins.read(contentByte);
		//还可以用循环读取
		//int i,j=0
		//while((i=ins.read())!=-1){
		//contentByte[j]=(byte)j;
		//j++;
		//}
		//将byte数组转为字符串
		String s = new String(contentByte);
		
		return s;
		
	}
	
	
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BaseIO bi = new BaseIO();
		//读取我们正在编写的着个java文件
		String filename="src\\IO体系结构\\BaseIO.java";
		String result=bi.readFile2String(filename);
	    System.out.println(result);
	}

}


  (2)FileOutputStream 写数据到文件

       构造方法:
             FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
            
             FileOutputStream(File file, boolean append)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

             FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。

             FileOutputStream(String name, boolean append) 创建一个向具有指定 name 的文件中写入数据的输出文件流。
示例代码:

package IO体系结构;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class BaseIOcopy {

	public boolean copyfile(String srcFile,String destFlie)throws IOException{
		//创建从源文件来的输入流
		InputStream ins = new FileInputStream(srcFile);
		//缓冲输入流对象:如果文件中已有内容则覆盖原来内容
		OutputStream out = new FileOutputStream(destFlie);
		int i=0;
		//从输入流中读取一个字节
		while((i=ins.read())!=-1){
			//将这个字节写到输入流
			out.write(i);
		}
		ins.close();
		//清空输入流的缓存并关闭
		out.flush();
		out.close();
		
		return true;
		
	}
	
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BaseIOcopy bic = new BaseIOcopy();
		//读取我们正在写的这个java源文件
		String srcName="G:\\蓝杰·java\\jdk1.6.CHM";
		//要复制到的目标文件
		String bakName="E:\\123.CHM";
		boolean result=bic.copyfile(srcName, bakName);
		System.out.println(result);

	}

}


6.缓冲流:BufferedInputStream 和BufferedOutputStream
  缓冲区:默认大小8192K

  优点:实用缓冲流相比原始流可以节省巨大的时间(试了一下,效果真的很显著!
示例代码:
package IO体系结构;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class BaseIOhpw {

	public boolean bufferedcopyfile(String srcFile,String destFlie)throws IOException{
		File src = new File(srcFile);
		File dest = new File(destFlie);
		
		//创建从源文件来的输入流
		InputStream ins = new FileInputStream(src); 
		//构造输入缓冲流
		BufferedInputStream bis = new BufferedInputStream(ins);
		//缓冲输入流对象:如果文件中已有内容则覆盖原来内容
		OutputStream out = new FileOutputStream(dest);
		BufferedOutputStream bos = new BufferedOutputStream(out);
		int i=0;
		//从输入流中读取一个字节
		while((i=ins.read())!=-1){
			//将这个字节写到输入流
			out.write(i);
		}
		ins.close();
		//清空输入流的缓存并关闭
		out.flush();
		out.close();
		
		return true;
		
	}
	
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BaseIOhpw bic = new BaseIOhpw();
		//读取我们正在写的这个java源文件
		String srcName="G:\\蓝杰·java\\jdk1.6.CHM";
		//要复制到的目标文件
		String bakName="E:\\456.CHM";
		boolean result=bic.bufferedcopyfile(srcName, bakName);
		System.out.println(result);

	}

}

你可能感兴趣的:(体系结构)