關於流的轉換主要涉及到的類是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();
}
}
通過例程可知,操作流是具有一定的規律性:
總結其規律如下:
-
明確源和目的 源: Reader InputStream 目的: Writer OutputStream
-
明確數據是否是純文本數據 源: 是 Reader 否 InputStream 目的: 是 Writer 否 OutputStream
-
明確具體的設備 源設備: 硬盤:File 鍵盤:System.in 內存:數組 網絡:Socket流 目的設備: 硬盤:File 控制檯:System.out 內存:數組 網絡:Socket流
-
是否需要其他額外功能(比較繁多) 1.是否需要高效(緩衝區): 是: 加入 buffer …… …… ……