字節流和字符流是Java I/O中的兩個重要概念。字節流可以用于讀寫任何類型的數據,而字符流只能用于讀寫文本數據。在使用Java I/O時,經常需要將字節流轉換為字符流或將字符流轉換為字節流。
字節流和字符流之間的轉換可以使用Java中的InputStreamReader和OutputStreamWriter類來實現。這兩個類分別將字節流轉換為字符流和將字符流轉換為字節流。
當我們需要從字節流中讀取字符數據時,可以創建一個InputStreamReader對象,將字節流傳遞給它,然后使用它讀取字符數據。同樣,當我們需要將字符數據寫入字節流時,可以創建一個OutputStreamWriter對象,將字節流傳遞給它,然后使用它寫入字符數據。
下面是一個使用InputStreamReader和OutputStreamWriter將字節流轉換為字符流和將字符流轉換為字節流的示例代碼:
import java.io.*;
public class ByteToCharExample {
public static void main(String[] args) throws Exception {
// 將字節流轉換為字符流
FileInputStream input = new FileInputStream("input.txt");
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
// 讀取字符數據
char[] buffer = new char[1024];
int length = reader.read(buffer);
String text = new String(buffer, 0, length);
System.out.println(text);
// 將字符流轉換為字節流
FileOutputStream output = new FileOutputStream("output.txt");
OutputStreamWriter writer = new OutputStreamWriter(output, "UTF-8");
// 寫入字符數據
String message = "Hello, World!";
writer.write(message);
writer.flush();
writer.close();
}
}
在上面的示例中,我們首先創建了一個FileInputStream對象,然后將其傳遞給InputStreamReader對象,以將字節流轉換為字符流。我們使用read()方法從字符流中讀取字符數據,并使用new String()方法將其轉換為字符串。接下來,我們創建了一個FileOutputStream對象,并將其傳遞給OutputStreamWriter對象,以將字符流轉換為字節流。最后,我們使用write()方法將字符數據寫入字節流中,并使用flush()方法將緩沖區中的所有數據刷新到文件中。