2013-02-24 68 views
0

我讀入文件:Android Inputread流完全讀取給定的緩衝區大小?

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()總是儘量多地閱讀就可以了,而不會產生任何異常?
或者這是一個未公開的特性?

的讀取方法的描述說:

讀取字符 陣列中來自該閱讀器的字符,並將它們存儲的buf開始偏移量爲0。返回字符 的數量實際上讀取或-1,如果端的讀者已經達到。

有緩衝的分配問題沒有提及。 這是非常重要的,一個好的東西,是這樣工作的,因爲它允許您定義緩衝區的大小,只要你想/需要,並沒有必要去猜測,沒有必要爲例外的代碼。其實,這是read(char[] buffer),但它可以作爲read(char[] buffer, int size)

回答

1

是的,你可以依靠這個調用,除非發生I/O錯誤,這是在API已經mentionned。

如果你看看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()

+0

這是不是我問。但是你是正確的,當你想閱讀整個文件時你應該​​這樣做。 – ilomambo 2013-02-24 17:47:10

+0

編輯我的答案 – Houf 2013-02-25 17:41:43

+0

沒有冒犯的意圖,但你可以解釋一點點什麼是您的斷言的基礎上,我們可以依靠讀我描述()的行爲嗎? – ilomambo 2013-02-25 20:00:33