鴻蒙OS BufferedReader

2022-10-17 17:40 更新

BufferedReader

java.lang.Object

|---java.io.Reader

|---|---java.io.BufferedReader

public class BufferedReader
extends Reader

從字符輸入流中讀取文本,緩沖字符,以便高效讀取字符、數(shù)組和行。

可以指定緩沖區(qū)大小,也可以使用默認(rèn)大小。 對(duì)于大多數(shù)用途,默認(rèn)值足夠大。

通常,由 Reader 發(fā)出的每個(gè)讀取請(qǐng)求都會(huì)導(dǎo)致對(duì)底層字符或字節(jié)流發(fā)出相應(yīng)的讀取請(qǐng)求。 因此,建議將 BufferedReader 包裝在 read() 操作可能成本高昂的任何 Reader 周圍,例如 FileReaders 和 InputStreamReaders。 例如,

 BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

將緩沖來(lái)自指定文件的輸入。 如果沒(méi)有緩沖,每次調(diào)用 read() 或 readLine() 都可能導(dǎo)致從文件中讀取字節(jié),轉(zhuǎn)換為字符,然后返回,這可能非常低效。

使用 DataInputStreams 進(jìn)行文本輸入的程序可以通過(guò)將每個(gè) DataInputStream 替換為適當(dāng)?shù)?BufferedReader 來(lái)本地化。

Since:

JDK1.1

字段摘要

從類 java.io.Reader 繼承的字段
lock

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
BufferedReader(Reader in) 創(chuàng)建一個(gè)使用默認(rèn)大小的輸入緩沖區(qū)的緩沖字符輸入流。
BufferedReader(Reader in, int sz) 創(chuàng)建一個(gè)使用指定大小的輸入緩沖區(qū)的緩沖字符輸入流。

方法總結(jié)

修飾符和類型 方法 描述
void close() 關(guān)閉流并釋放與其關(guān)聯(lián)的任何系統(tǒng)資源。
StreamString lines() 返回一個(gè) Stream,其元素是從此 BufferedReader 讀取的行。
void mark(int readAheadLimit) 標(biāo)記流中的當(dāng)前位置。
boolean markSupported() 告訴這個(gè)流是否支持 mark() 操作,它支持。
int read() 讀取單個(gè)字符。
int read(char[] cbuf, int off, int len) 將字符讀入數(shù)組的一部分。
String readLine() 讀取一行文本。
boolean ready() 告訴這個(gè)流是否準(zhǔn)備好被讀取。
void reset() 將流重置為最新標(biāo)記。
long skip(long n) 跳過(guò)字符。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
從類 java.io.Reader 繼承的方法
read, read

構(gòu)造函數(shù)詳細(xì)信息

BufferedReader

public BufferedReader(Reader in, int sz)

創(chuàng)建一個(gè)使用指定大小的輸入緩沖區(qū)的緩沖字符輸入流。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 輸入流
sz 輸入緩沖區(qū)大小

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 sz <= 0

BufferedReader

public BufferedReader(Reader in)

創(chuàng)建一個(gè)使用默認(rèn)大小的輸入緩沖區(qū)的緩沖字符輸入流。

參數(shù):

參數(shù)名稱 參數(shù)描述
in 輸入流

方法詳情

read

public int read() throws IOException

讀取單個(gè)字符。

覆蓋:

在類輸入流中讀取

返回:

讀取的字符,為 0 到 65535 (0x00-0xffff) 范圍內(nèi)的整數(shù),如果已到達(dá)流的末尾,則為 -1

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

read

public int read(char[] cbuf, int off, int len) throws IOException

將字符讀入數(shù)組的一部分。

該方法實(shí)現(xiàn)了 Reader 類對(duì)應(yīng)的 [Reader#read(char], int, int) 方法的通用約定。 作為額外的便利,它嘗試通過(guò)重復(fù)調(diào)用底層流的讀取方法來(lái)讀取盡可能多的字符。 此迭代讀取將繼續(xù),直到滿足以下條件之一:

  • 已讀取指定數(shù)量的字符,
  • 底層流的read方法返回-1,表示文件結(jié)束,或者
  • 底層流的 ready 方法返回 false,表示進(jìn)一步的輸入請(qǐng)求會(huì)阻塞。

如果對(duì)底層流的第一次讀取返回 -1 以指示文件結(jié)束,則此方法返回 -1。 否則,此方法返回實(shí)際讀取的字符數(shù)。

鼓勵(lì)但不要求此類的子類嘗試以相同的方式讀取盡可能多的字符。

通常,此方法從該流的字符緩沖區(qū)中獲取字符,并根據(jù)需要從底層流中填充它。 但是,如果緩沖區(qū)為空,標(biāo)記無(wú)效,并且請(qǐng)求的長(zhǎng)度至少與緩沖區(qū)一樣大,則此方法將直接從底層流中讀取字符到給定數(shù)組中。 因此冗余的 BufferedReader 不會(huì)不必要地復(fù)制數(shù)據(jù)。

指定者:

在類讀取流中閱讀

參數(shù):

參數(shù)名稱 參數(shù)描述
cbuf 目標(biāo)緩沖區(qū)
off 開(kāi)始存儲(chǔ)字符的偏移量
len 要讀取的最大字符數(shù)

返回:

讀取的字符數(shù),如果已到達(dá)流的末尾,則為 -1

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

readLine

public String readLine() throws IOException

讀取一行文本。 一行被認(rèn)為是由換行符 ('\n')、回車符 ('\r') 或緊跟換行符的回車符中的任何一個(gè)終止的。

返回:

包含行內(nèi)容的字符串,不包括任何行終止字符,如果已到達(dá)流的末尾,則為 null

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

skip

public long skip(long n) throws IOException

跳過(guò)字符。

覆蓋:

skip 類輸入流

參數(shù):

參數(shù)名稱 參數(shù)描述
n 要跳過(guò)的字符數(shù)

返回:

實(shí)際跳過(guò)的字符數(shù)

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 n 為負(fù)數(shù)。
IOException 如果發(fā)生 I/O 錯(cuò)誤

ready

public boolean ready() throws IOException

告訴這個(gè)流是否準(zhǔn)備好被讀取。 如果緩沖區(qū)不為空,或者底層字符流已準(zhǔn)備好,則緩沖字符流已準(zhǔn)備好。

覆蓋:

準(zhǔn)備好類輸入流

返回:

如果保證下一個(gè) read() 不會(huì)阻塞輸入,則為 true,否則為 false。 請(qǐng)注意,返回 false 并不能保證下一次讀取將阻塞。

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

markSupported

public boolean markSupported()

告訴這個(gè)流是否支持 mark() 操作,它支持。

覆蓋:

在閱讀器類中標(biāo)記支持

返回:

當(dāng)且僅當(dāng)此流支持標(biāo)記操作時(shí)才為 true。

mark

public void mark(int readAheadLimit) throws IOException

標(biāo)記流中的當(dāng)前位置。 對(duì) reset() 的后續(xù)調(diào)用將嘗試將流重新定位到該點(diǎn)。

覆蓋:

在類輸入流中標(biāo)記

參數(shù):

參數(shù)名稱 參數(shù)描述
readAheadLimit 在保留標(biāo)記的同時(shí)限制可以讀取的字符數(shù)。 在讀取達(dá)到此限制或超過(guò)此限制的字符后嘗試重置流可能會(huì)失敗。 大于輸入緩沖區(qū)大小的限制值將導(dǎo)致分配一個(gè)大小不小于限制的新緩沖區(qū)。 因此,應(yīng)謹(jǐn)慎使用較大的值。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 readAheadLimit < 0
IOException 如果發(fā)生 I/O 錯(cuò)誤

reset

public void reset() throws IOException

將流重置為最新標(biāo)記。

覆蓋:

在輸入流類中重置

Throws:

Throw名稱 Throw描述
IOException 如果流從未被標(biāo)記,或者標(biāo)記已失效

close

public void close() throws IOException

從班級(jí)復(fù)制的描述:讀者

關(guān)閉流并釋放與其關(guān)聯(lián)的任何系統(tǒng)資源。 關(guān)閉流后,進(jìn)一步的 read()、ready()、mark()、reset() 或 skip() 調(diào)用將引發(fā) IOException。 關(guān)閉以前關(guān)閉的流沒(méi)有效果。

指定者:

在接口 AutoCloseable 中關(guān)閉

指定者:

在接口Closeable中關(guān)閉

指定者:

關(guān)閉類輸入流

Throws:

Throw名稱 Throw描述
IOException 如果發(fā)生 I/O 錯(cuò)誤

lines

public StreamString lines()

返回一個(gè) Stream,其元素是從此 BufferedReader 讀取的行。 Stream 是惰性填充的,即在終端流操作期間只讀發(fā)生。

終端流操作執(zhí)行過(guò)程中不得對(duì)閱讀器進(jìn)行操作。否則,終端流操作的結(jié)果是不確定的。

執(zhí)行終端流操作后,不能保證閱讀器將處于讀取下一個(gè)字符或行的特定位置。

如果在訪問(wèn)底層 BufferedReader 時(shí)拋出 IOException,它將被包裝在 UncheckedIOException 中,該異常將從導(dǎo)致讀取發(fā)生的 Stream 方法中拋出。如果在關(guān)閉的 BufferedReader 上調(diào)用此方法,將返回一個(gè) Stream。該流上的任何需要在關(guān)閉后從 BufferedReader 讀取的操作都將導(dǎo)致拋出 UncheckedIOException。

返回:

提供此 BufferedReader 描述的文本行的 Stream<String>

Since:

1.8

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)