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