上次聊到了 java 的字節(jié)流 InputStream,今天來看看它的好朋友 Reader 字符流。
Reader
java 中的 IO 輸入流不是只有 InputStream 還有按字符輸入的 Reader。
InputStream | Reader |
---|---|
字節(jié)流,以 byte 為單位 | 字符流,以 char 為單位 |
讀取字節(jié)(-1,0~255):int read() | 讀取字符(-1,0~65535):int read() |
讀到字節(jié)數(shù)組:int read(byte[] b) | 讀到字符數(shù)組:int read(char[] c) |
和 InputStream 一樣,Reader 也是所有字符輸入流的超類。主要的方法是:public int read() throws IOException
,read() 讀取字符流中的下一個(gè)字符,返回 0-65535 的 int 類型數(shù)值, 返回 -1 表示已經(jīng)讀取結(jié)束。
FileReader
FileReader 打開一個(gè)文件并獲取到文件的字符流。FileReader 用于讀取文件中的內(nèi)容。
private void fileReaderDemo() throws Exception {
Reader reader = new FileReader("D:
eaderDemo.txt");
int n;
while ((n = reader.read()) != -1) {
System.out.print((char)n);
}
reader.close();
}
Reader 實(shí)現(xiàn)了 Closeable 接口,可以用 try(Reader reader = new FileReader("D: eaderDemo.txt")) {}
的方式關(guān)閉掉資源。
InputStreamReader
InputStreamReader 就是將 InputStream 讀取的字節(jié)流裝換為 Reader 的字符流。可以把任意的 InputStream 轉(zhuǎn)換為 Reader,F(xiàn)ileReader 就繼承自 InputStreamReader。在創(chuàng)建 InputStreamReader 實(shí)例對(duì)象的時(shí)候可以指定字符集,以防止亂碼。
private void inputStreamReaderDemo() throws Exception {
InputStream inputStream = new FileInputStream("D:
eaderDemo.txt");
try(Reader reader = new InputStreamReader(inputStream, "utf-8")) {
int n;
while ((n = reader.read()) != -1) {
System.out.print((char)n);
}
}
}
StringReader 和 CharArrayReader
FileReader 是將文件作為一個(gè)讀取源,StringReader 將 string 字符串作為一個(gè)讀取源。
private void stringReaderDemo() throws Exception {
try(Reader reader = new StringReader("這是測(cè)試代碼")) {
char[] buffer = new char[1024];
while ((reader.read(buffer)) != -1) {
System.out.print(buffer);
}
}
}
reader.read(char[] buffer) 是 reader 讀取字符流的重載方法,將內(nèi)容不在是一個(gè) char 一個(gè) char 的輸出,而是將內(nèi)容讀取到緩沖區(qū) buffer 后一次性輸出。
CharArrayReader 和 StringReader 幾乎一樣,調(diào)用方法變成了 try(Reader reader = new CharArrayReader("這是測(cè)試代碼".toCharArray()))
BufferedReader
提供通用的緩沖方式讀取文本并且提供了 readLine() 讀取了一個(gè)文本行。從字符輸入流中讀取文本,緩沖各個(gè)字符,從而提供字符、數(shù)組和行的高效讀取。
private void bufferedReaderDemo() throws Exception {
try(BufferedReader reader = new BufferedReader(new FileReader("D:
eaderDemo.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
總結(jié)
介紹了幾種常用 Reader 輸入流的使用方式。FileReader 用于文件讀取,BufferedReader 自帶緩沖區(qū)讀取效率高,StringReader 和 CharArrayReader 可以讀取字符串源,InputStreamReader 將 InputStream 轉(zhuǎn)為 Reader。
-
接口
+關(guān)注
關(guān)注
33文章
8691瀏覽量
151911 -
文件
+關(guān)注
關(guān)注
1文章
570瀏覽量
24821 -
字符
+關(guān)注
關(guān)注
0文章
234瀏覽量
25262 -
代碼
+關(guān)注
關(guān)注
30文章
4825瀏覽量
69043 -
reader
+關(guān)注
關(guān)注
0文章
7瀏覽量
8711
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論