0

私は次のファイルを読んでいます:

char [] buffer = new char[300];
FileInputStream istream = new FileInputStream(path);
InputStreamReader file = new InputStreamReader(istream);
size = file.read(buffer);
file.close();

数回試行した後、file.read(buffer)読み取りはバッファーに割り当てられた文字数を正確に読み取ることがわかりました(この場合、ファイルにはるかに多くの文字が含まれている場合でも、300文字です)。

例外を生成せずに、常に可能な限り多くの読み取りを行うread()に依存できますか?
それとも、これは文書化されていない機能ですか?

読み取りメソッドの説明には次のように書かれています。

このリーダーから文字を読み取り、オフセット0から始まる文字配列bufに格納します。実際に読み取られた文字数を返します。リーダーの終わりに達した場合は-1を返します。

バッファ割り当ての問題については言及されていません。これは非常に重要であり、このように機能することは良いことです。これにより、必要に応じてバッファーのサイズを定義でき、推測したり、例外をコーディングしたりする必要がなくなります。実はそうですread(char[] buffer)が、として動作しread(char[] buffer, int size)ます。

4

1 に答える 1

1

はい、APIですでに言及されているI / Oエラーが発生しない限り、この呼び出しに頼ることができます。

コードを見るread(char cbuf[])と、メソッドが呼び出されていることがわかりますpublic int read (char[] buffer, int offset, int length)

Androidのソースコードから:

public int read(char cbuf[]) throws IOException { read(cbuf, 0, cbuf.length);}

file.read(buffer)実装では、残りのバイトを取得するためにファイルの読み取りを続行する必要があります。の内容はbuffer、読み取るファイルのサイズに応じて大きくなる別のバッファーに追加する必要があります。

メソッドを使用して、ファイルのサイズでそのバッファを割り当てることもできます。getTotalSpace()

于 2013-02-24T14:42:31.317 に答える