1. 程式人生 > >JAVA基礎21-IO流

JAVA基礎21-IO流

1.流分類

不同角度對流進行分類:
1.根據資料單位不同,字元流,位元組流
2.資料流方向可分為,輸入流,輸出流
3.功能不同,可分為:節點流,處理流。

在這裡插入圖片描述

2.流的體系

Java中所有的流類位於java.io包,分別繼承以下四種抽象流型別

型別 位元組流 字元流
輸入流 InputStream Reader
輸出流 OutputStream Writer

在這裡插入圖片描述
在這裡插入圖片描述

3.常見的流介紹

3-1 常見節點流

 1.對檔案操作的字元流有FileReader/FileWriter
 2.對檔案操作的位元組流有 FileInputStream/FileOutputStram

3-2.常見處理流

3-2-1.緩衝流
概念:緩衝流要套接在相應的節點流上,為讀寫提供了緩衝功能
分類:
	A:位元組緩衝流 BufferedInputStream/BufferedOutputStream
	B:字元緩衝流	BufferReader/BufferWriter
注意: 
	A:字元緩衝流分別提供了讀取和寫入一行的方法ReadLine和NewLine方法 
	B:對於輸出緩衝流,寫出的資料,會先寫入到記憶體中,再使用flush方法將記憶體中的資料刷到硬碟。所以,在使用字元緩衝流的時候,一定要先flush,然後再close,避免資料丟失。

3-2-2轉換流 用於位元組資料到字元資料之間的轉換

1. InputStreamReader(要InputStream套接):位元組到字元的橋樑
2. OutputStreamWriter:字元到位元組的橋樑
	A:字元流InputStreamReader位元組流通向字元流的橋樑
	B:OutPutStreamWriter(要OutPutStream套接)字元流通向位元組流的橋樑

3-2-3資料流

	  提供讀寫java中基本資料型別的功能  DataInputStream/DataOutputStream

3-2-4物件流

		用於直接將物件寫入寫出
				ObjectInputStream /ObjectOutputStream
					作用的物件必須實現Serializable介面

4.位元組流和字元流的轉換

4-1.位元組流轉字元流

概念:
位元組流(InputStream,OutPutStream)-》字元流(Reader,Writer)
實現方式:
利用這兩個類可以實現 InputStreamReader,OutputStreamWriter

package com.demo9aa.demo6;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Demo1 {
	
	public static void main(String[] args) throws IOException {
		
		//位元組流轉換為字元流【輸入流】
		//模擬出位元組流
		FileInputStream f=new FileInputStream("E:\\1.txt");
		//位元組流轉換為字元流
		InputStreamReader re=new InputStreamReader(f,"GBK");
		BufferedReader reb=new BufferedReader(re);
		//驗證是否成功
		StringBuffer b=new StringBuffer();
		String s=null;
		while((s=reb.readLine())!=null){
			b.append("\n"+s);
		}
		System.out.println(b.toString());
		reb.close();
		re.close();
		f.close();
		
		//位元組流轉換為字元流【輸出流】
		OutputStreamWriter w=new OutputStreamWriter(new FileOutputStream("E:\\1.txt"), "GBK");
		BufferedWriter ww=new BufferedWriter(w);
		ww.write("中國夢");
		ww.flush();
		ww.close();
		
	}
}
4-2.字元流轉換為位元組流

概念:
字元流(Reader,Writer) -》位元組流(InputStream,OutPutStream)
實現方式:
(1)利用字元流得到char[]資料
(2)char[]轉換為String;
(3)String的getByte()轉換為byte[]資料
(4)通過 ByteArrayInputStream和ByteArrayOutputStream 即可獲得位元組流

package com.demo9aa.demo6;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

public class Demo2 {
	public static void main(String[] args) throws IOException {
		//字元流轉位元組流[輸入]
		//模擬出字元流
		FileReader rr=new FileReader("E:\\1.txt");
		//轉換過程
		char[] c= new char[1024];
		StringBuffer s=new StringBuffer();
		while(rr.read(c, 0, c.length)!=-1){
			s.append(String.valueOf(c));
		}
		ByteArrayInputStream in=new ByteArrayInputStream(s.toString().getBytes("GBK"));
		//驗證轉換成功否
		FileOutputStream f=new FileOutputStream("E:\\2.txt");
		f.write(s.toString().getBytes("GBK"));
	}

}