流的概念:

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

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

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

Java学习笔记----流_Java

流的分类:

  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