Java中的I/O操作可以分為兩種類型:字節(jié)流和字符流。字節(jié)流用于處理二進(jìn)制數(shù)據(jù),而字符流用于處理文本數(shù)據(jù)。本文將詳細(xì)介紹Java中的字節(jié)流和字符流,并給出相應(yīng)的示例代碼。
Java中的字節(jié)流主要用于處理二進(jìn)制數(shù)據(jù),如圖像、音頻和視頻等。Java中的字節(jié)流主要分為InputStream和OutputStream兩種類型。
InputStream是Java中所有輸入流的基類。InputStream中定義了許多方法用于讀取字節(jié)。以下是InputStream中一些常用的方法:
(資料圖)
int read(): 從輸入流中讀取一個(gè)字節(jié)的數(shù)據(jù)。如果已到達(dá)文件結(jié)尾,則返回-1。int read(byte[] b): 從輸入流中讀取最多b.length個(gè)字節(jié)的數(shù)據(jù),并將其存儲(chǔ)到緩沖區(qū)b中。返回實(shí)際讀取的字節(jié)數(shù)。int available(): 返回可以從輸入流中讀取的字節(jié)數(shù)。下面是一個(gè)從文件中讀取數(shù)據(jù)并將其顯示在控制臺(tái)上的示例:
import java.io.*;public class InputStreamExample { public static void main(String[] args) throws IOException { InputStream in = new FileInputStream("test.txt"); int b; while ((b = in.read()) != -1) { System.out.print((char) b); } in.close(); }}
在上述示例中,我們使用FileInputStream打開(kāi)一個(gè)文件,并使用read()方法讀取文件中的每一個(gè)字節(jié),并將其顯示在控制臺(tái)上。
OutputStream是Java中所有輸出流的基類。OutputStream中定義了許多方法用于寫(xiě)入字節(jié)。以下是OutputStream中一些常用的方法:
void write(int b): 將指定的字節(jié)寫(xiě)入輸出流中。void write(byte[] b): 將指定的字節(jié)數(shù)組中的數(shù)據(jù)寫(xiě)入輸出流中。void flush(): 刷新輸出流并強(qiáng)制寫(xiě)入所有緩沖的輸出字節(jié)。下面是一個(gè)將數(shù)據(jù)寫(xiě)入文件的示例:
javaCopy codeimport java.io.*;public class OutputStreamExample { public static void main(String[] args) throws IOException { OutputStream out = new FileOutputStream("test.txt"); String str = "Hello, world!"; byte[] b = str.getBytes(); out.write(b); out.close(); }}
在上述示例中,我們使用FileOutputStream打開(kāi)一個(gè)文件,并使用write()方法將一個(gè)字符串轉(zhuǎn)換為字節(jié)數(shù)組,然后將其寫(xiě)入文件中。
Java中的字符流主要用于處理文本數(shù)據(jù)。字符流可以直接處理Unicode字符,因此在處理中文等特殊字符時(shí)很方便。Java中的字符流主要分為Reader和Writer兩種類型。
Reader是Java中所有讀取字符流的基類。Reader中定義了許多方法用于讀取字符。以下是Reader中一些常用的方法:
int read(): 從輸入流中讀取一個(gè)字符的數(shù)據(jù)。如果已到達(dá)文件結(jié)尾,則返回-1。int read(char[] c): 從輸入流中讀取最多c.length個(gè)字符的數(shù)據(jù),并將其存儲(chǔ)到緩沖區(qū)c中。返回實(shí)際讀取的字符數(shù)。下面是一個(gè)從文件中讀取數(shù)據(jù)并將其顯示在控制臺(tái)上的示例:
import java.io.*;public class ReaderExample { public static void main(String[] args) throws IOException { Reader reader = new FileReader("test.txt"); int c; while ((c = reader.read()) != -1) { System.out.print((char) c); } reader.close(); }}
在上述示例中,我們使用FileReader打開(kāi)一個(gè)文件,并使用read()方法讀取文件中的每一個(gè)字符,并將其顯示在控制臺(tái)上。
Writer是Java中所有寫(xiě)入字符流的基類。Writer中定義了許多方法用于寫(xiě)入字符。以下是Writer中一些常用的方法:
void write(int c): 將指定的字符寫(xiě)入輸出流中。void write(char[] c): 將指定的字符數(shù)組中的數(shù)據(jù)寫(xiě)入輸出流中。void flush(): 刷新輸出流并強(qiáng)制寫(xiě)入所有緩沖的輸出字符。下面是一個(gè)將數(shù)據(jù)寫(xiě)入文件的示例:
import java.io.*;public class WriterExample { public static void main(String[] args) throws IOException { Writer writer = new FileWriter("test.txt"); String str = "Hello, world!"; writer.write(str); writer.close(); }}
在上述示例中,我們使用FileWriter打開(kāi)一個(gè)文件,并使用write()方法將一個(gè)字符串寫(xiě)入文件中。
在Java中,字節(jié)流和字符流有以下區(qū)別:
字節(jié)流主要用于處理二進(jìn)制數(shù)據(jù),如圖像、音頻和視頻等。字符流主要用于處理文本數(shù)據(jù)。
字節(jié)流以字節(jié)為單位進(jìn)行讀取和寫(xiě)入,而字符流以字符為單位進(jìn)行讀取和寫(xiě)入。
字節(jié)流不關(guān)心數(shù)據(jù)的編碼方式,可以處理任何類型的數(shù)據(jù)。而字符流必須使用特定的字符編碼方式,如UTF-8或GBK,以正確地處理文本數(shù)據(jù)。
標(biāo)簽: