流的概念:

流的概念源于UNIX中管道的概念,一个流必须有源端和目的端,根据流的方向分为输入流和输出流

输入流:用户从输入流中读取信息到内存中,因此不能写

输出流:用户从内存中往输出流中写入数据,因此不能读。

流的分类:

  1. 节点流

    FileReader

    FileWriter

    FileInputStream

    FileOutputStream

  2. 处理流

 a)缓冲流:BufferdInputStream/BufferedOutputStream /BufferedReader/BufferedWriter

    该类型是对一个已经存在的流的连接和封装,通过所封装的流的功能调用实现数据的读写,处理流的构造方法总是要带一个其他流对象作为参数,一个流对象经过其他流多次的包装

    叫做流的连接

缓冲流代码:

        public void read(){		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));		String s;		try {			while((s=in.readLine()).length()!=0){				System.out.println(s);			}		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}	@Test	public void write(){		try {			PrintWriter out =new PrintWriter(new BufferedWriter(new FileWriter("D:\\java\\test.txt")));			out.println("Hello world");			out.println("hello world 2");			out.println("Hello world 3");			out.close();		} catch (IOException e) {			e.printStackTrace();		}	}

b)转换流:InputStreamReader/OutputStream

 FileReader fr=new FileReader(“a.txt”);      与     InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"));   的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流是必须的。

构造函数主要有:

 InputStreamReader(InputStream);        //通过构造函数初始化,使用的是本系统默认的编码表GBK。   InputStreamWriter(InputStream,String charSet);   //通过该构造函数初始化,可以指定编码表。   OutputStreamWriter(OutputStream);      //通过该构造函数初始化,使用的是本系统默认的编码表GBK。   OutputStreamwriter(OutputStream,String charSet);   //通过该构造函数初始化,可以指定编码表。
public static void stream(){		OutputStream out=null;		try {			out=new FileOutputStream("D:\\java\\test2.txt");			OutputStreamWriter w=new OutputStreamWriter(out,"Utf-8");			w.append("hello.\r\n");			w.append("World.");			w.flush();			w.close();		} catch (IOException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}			}	public static void input(){		InputStream in=null;		try {			in=new FileInputStream("D:\\java\\test2.txt");			InputStreamReader ir=new InputStreamReader(in,"UTF-8");			StringBuffer sb=new StringBuffer();//在这里创建了一个缓存			while(ir.ready()){				sb.append((char)ir.read());			}			System.out.println(sb.toString());			ir.close();			in.close();		} catch (IOException e) {			e.printStackTrace();		}			}

c)数据流:

构造函数主要有:

 DataInputStreamReader(InputStream);   DataInputStreamWriter(OutputStream);
<----------------------------------主要方法------------------------------>int readInt();//一次读取四个字节,并将其转成int值  writeInt(int);//一次写入四个字节,注意和write(int)不同,write(int)只将该整数的最低一个8位写入,剩余三个8为丢失  hort readShort();  writeShort(short);  String readUTF();//按照utf-8修改版读取字符,注意,它只能读writeUTF()写入的字符数据。  writeUTF(String);//按照utf-8修改版将字符数据进行存储,只能通过readUTF读取。

参考自:http://blog.csdn.net/zzp_403184692/article/details/8057693