2013-02-24 67 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