JAVA——IO流 篇五

關於流的轉換主要涉及到的類是InputStreamReader字節流到字符流的橋樑,它讀取字節,並使用指定的charset將其解碼爲字符 。 它使用的字符集可以由名稱指定,也可以被明確指定,或者可以接受平臺的默認字符集。 OutputStreamWriter字符流到字節流的橋樑,使用指定的字符集將寫入其中的字符編碼爲字節。 它使用的字符集可以通過名稱指定,也可以明確指定,或者可以接受平臺的默認字符集。
JAVA——IO流 篇四簡單的提到過流的轉換,通過標準輸入流讀取字節轉換爲字符流,結合上面的例程,我們也可以添加輸出流的轉換,將讀取到的字符流轉換成字節流,在進行輸出。

	public static void readKeyOver() throws IOException 
	{
		//獲取標準輸入流對象(獲取鍵盤輸入內容)
		InputStream in = System.in;
		//將輸入字節流轉化爲輸入字符流對象
		InputStreamReader inputStreamReader = new InputStreamReader(in);
		//創建輸入字符流緩衝區對象
		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
		
		//獲取標準輸出流對象
		PrintStream out = System.out;
		//將輸出字符流裝換成輸出字節流對象
		OutputStreamWriter outputStreamWriter = new OutputStreamWriter(out);
		//創建字符流緩衝區
		BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
		
		String lineString;
		//讀取輸入的每一行數據
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判斷每行的數據是否爲over
			if(lineString.equals("over")) 
			{
				break;//跳出循環
			}
			//將字符數據寫入字符緩衝區
			bufferedWriter.write(lineString);
			//換行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

上述代碼經分析,其流程如下所示:
代碼分析流程圖
將上述代碼在進一步的封裝:

	public static void readKeyOver() throws IOException 
	{
		//輸入流緩衝區對象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		//輸出流緩衝區對象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		String lineString;
		//讀取輸入的每一行數據
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判斷每行的數據是否爲over
			if(lineString.equals("over")) 
			{
				break;//跳出循環
			}
			//將字符數據寫入字符緩衝區
			bufferedWriter.write(lineString);
			//換行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

則可進行高質量的複用,如下所示:
將鍵盤路的的數據寫入一個文件中

public static void readKeyOver() throws IOException 
	{
		//輸入流緩衝區對象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		//輸出流緩衝區對象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt")));
		String lineString;
		//讀取輸入的每一行數據
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判斷每行的數據是否爲over
			if(lineString.equals("over")) 
			{
				break;//跳出循環
			}
			//將字符數據寫入字符緩衝區
			bufferedWriter.write(lineString);
			//換行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

將一個文本文件內容顯示在控制檯上

	public static void readKeyOver() throws IOException 
	{
		//輸入流緩衝區對象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
		//輸出流緩衝區對象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		String lineString;
		//讀取輸入的每一行數據
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判斷每行的數據是否爲over
			if(lineString.equals("over")) 
			{
				break;//跳出循環
			}
			//將字符數據寫入字符緩衝區
			bufferedWriter.write(lineString);
			//換行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

將一個文件總的內容複製到另一個文件中

	public static void readKeyOver() throws IOException 
	{
		//輸入流緩衝區對象		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("a.txt")));
		//輸出流緩衝區對象
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));
		String lineString;
		//讀取輸入的每一行數據
		while((lineString = bufferedReader.readLine()) != null) 
		{
			//判斷每行的數據是否爲over
			if(lineString.equals("over")) 
			{
				break;//跳出循環
			}
			//將字符數據寫入字符緩衝區
			bufferedWriter.write(lineString);
			//換行
			bufferedWriter.newLine();
			//刷新流
			bufferedWriter.flush();
		}
	}

通過例程可知,操作流是具有一定的規律性:
總結其規律如下:

  1. 明確源和目的
            源:     Reader      InputStream
            目的:    Writer     OutputStream
    
  2. 明確數據是否是純文本數據
     	 源:    是         Reader
    	         否	        InputStream
         目的:  是         Writer
    	         否	        OutputStream
    
  3. 明確具體的設備
          源設備:
                  硬盤:File
                  鍵盤:System.in
                  內存:數組
                  網絡:Socket流
          目的設備:
           		 硬盤:File
                  控制檯:System.out
                  內存:數組
                  網絡:Socket流
    
  4. 是否需要其他額外功能(比較繁多)		
     		1.是否需要高效(緩衝區):     
     				是:			加入 buffer
     		……   ……    ……
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章