Android Inputread流完全读取给定的缓冲区大小?
问题描述:
我读入文件: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)
。
答
是的,你可以依靠这个调用,除非发生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()
这是不是我问。但是你是正确的,当你想阅读整个文件时你应该这样做。 – ilomambo 2013-02-24 17:47:10
编辑我的答案 – Houf 2013-02-25 17:41:43
没有冒犯的意图,但你可以解释一点点什么是您的断言的基础上,我们可以依靠读我描述()的行为吗? – ilomambo 2013-02-25 20:00:33