Java--IO流相關

  • 節點流

1.字節流:

輸入流:InputStream:read(byte[]);close();子類----->FileInputStream

輸出流:OutputStream:write(byte[]);flush();close() ;子類---->FileOutputStream

2.字符流

輸入流:Reader:read(char[]);read(char[], int, int);close();子類----->FileReader

輸出流:Writer:write(char[]);write(char[], int, int);write(String, int, int);write(String);flush();close(); 子類---->FileWriter

  • 緩衝流:提高流的效率跟性能

在以後的開發中建議在節點流之上套一層緩衝流提高性能

1.字節流:

1.字節緩衝輸入流:BufferedInputStrean;  2.字節緩衝輸出流:BufferedOutputStream

2.字符流:

1.字符緩衝輸入流:BufferedReader:readLine() ;2.字符緩衝輸出流:BufferedWriter:newLine();

  • 轉換流:字節流轉換字符流,處理亂碼編碼集或解碼集

編碼與解碼的概念:

編碼:字符-------編碼字符集------>二進制(字節);     解碼:二進制(字節)------解碼字符集------>字符

亂碼:1.編碼與解碼不統一;2.字符缺少,長度丟失

轉換流:1.輸出流:OutputStreamWriter(編碼)    2.輸入流:InputStreamReader(解碼)

//以讀取爲例說明InputStreamReader的用法,輸出同理

//正常情況下是這樣定義一個讀取緩衝流。
//Reader類是接口。只能通過子類FileReader來定義。BufferedReader 類的readLine不是重寫父類的方法。
//而是BufferedReader新增的方法。所以不能通過多態的形式來聲明bf。
//因爲解碼只能對字節進行解碼,但是這種字符的讀取方式沒法進行解碼,
//所以我們只能底層通過字節的讀取方式來進行解碼操作
BufferedReader bf =new BufferedReader(new FileReader(new File("")));


//2.改進後的聲明
BufferedReader bf=new BufferedReader(new FileInputStream(new File("")));
//如果在編譯器上面寫上這句代碼就會發現,這個是一個錯誤的代碼。
//底層的字節流,緩衝流是沒法通過字符的形式讀取的。所以有了一下的改進方式

//2.通過轉換流完成字節到字符的轉換,並且實現解碼操作
BufferedReader bf=new BufferedReader(                //通過緩衝流進行分裝,更容易讀取
                        new InputStreamReader(      //關鍵步驟:通過轉換流完成底層字節流到字符                
                                                     //流的轉換與解碼操作
                            new FileInputStream(    //通過字節流的方式讀取文件
                                  new File("")),"utf-8"));//將文件跟程序綁定
  • 其他流

  1. 節點流

字節數組輸入流:ByteArrayInputStream:    字節數組輸出流:ByteArrayOutputStream

//ByteArrayInputStream用法
public static void read() throws IOException {
		String msg ="今天第三天";
		//內存中轉化成Bytes數據
        byte[] src =msg.getBytes();
		//沒有新增方法,可以使用多態
		InputStream is =new BufferedInputStream(new ByteArrayInputStream(src));
		//設置一個緩衝區大小1024
        byte[] flush =new byte[1024];
        //讀取長度
		int len=0;
        //循環讀取
		while(-1!=(len=is.read(flush))) {
			System.out.println(new String(flush,0,len));
		}
		is.close();
	}
//ByteArrayOutputStream的用法
public static void write() throws IOException {
		//設置目的,字節數組
		byte[] dest;
		ByteArrayOutputStream bos =new ByteArrayOutputStream();
		String msg ="今天第三天";
		byte[] src =msg.getBytes();
		//寫入流管道中
		bos.write(src, 0, src.length);
		//目的地處獲得數據
		dest=bos.toByteArray();
		bos.close();
		System.out.println(new String(dest));
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章