內存流(字節數組流)——ByteArrayInputStream、ByteArrayOutputStream

內存流(字節數組流)——主要用於將數據寫入內存或者從內存中讀取數據;

我們知道,流操作主要用於讀寫文件或者是網絡傳輸,而實際開發中經常遇到將數據存入磁盤的緩存操作,那麼是否可以將緩存寫入內存呢?因爲內存的操作速度是遠大於磁盤的!答案是有的,那就是內存流!

例:將字節數組寫入內存

	public static void main(String[] args) throws IOException {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		os.write(100);//將指定的字節寫入此字節數組輸出流。ps:雖然參數是int類型 但是隻會寫入8位,即一個字節
		os.write(new byte[] {0,0,0,100});//將字節數組寫入內存
		os.write(new byte[] {0,0,0,100}, 0, 4);//將字節數組指定位置的數據寫入內存
		byte[] byteArray = os.toByteArray();//獲取寫入內存流中的所有數據
//		os.writeTo(new FileOutputStream(""));//將內存流中的數據全部寫入其他輸出流
		System.out.println(byteArray.length);//輸入結果爲9
		
		/*
		 * 關閉此字節數組輸出流   
		 * ps:此方法內部是空的沒有實際意義,
		 * 調用此方法後再次調用write方法並不會拋出IOException
		 * jdk1.8.191
		 */
		os.close();
	}

例:從內存中讀取字節數組

	public static void main(String[] args) throws IOException {
		String str = "123456789";//數據源
		ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
		int read = in.read();//從這個輸入流中讀取下一個字節 返回一個無符號 的byte值,範圍 0-255
		System.out.println((char)read);//輸出結果爲 "1"
		byte[] b = new byte[4];
		in.read(b);
		System.out.println(new String(b));//輸出結果爲 "2345"
		in.read(b, 0, 4);
		System.out.println(new String(b));//輸出結果爲 "6789"
		in.reset();//重置指針至mark位置
		in.close();//此方法是一個空方法 ,執行此方法後再次執行read方法並不會導致IOException
		in.markSupported();//測試該流是否可以標記,始終返回true
		in.mark(132);//在當前位置標記  ps:參數132沒有意義,始終標記的是當前讀取的位置
		/**
		 * in.read(b);方法不會拋出IOException 沒有數據時會返回-1;
		 * 其他跟正常io流一樣
		 * jdk1.8.191
		 */
	}

ps:

    字節數組流內部採用System.arraycopy();該API實現對字節數組的操作的!不要想得太高大上喔!

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