Android Inputread stream准确读取给定的缓冲区大小?

Android Inputread stream准确读取给定的缓冲区大小?,android,memory-management,buffer,inputstream,Android,Memory Management,Buffer,Inputstream,我正在读取一个文件,其中包含: char [] buffer = new char[300]; FileInputStream istream = new FileInputStream(path); InputStreamReader file = new InputStreamReader(istream); size = file.read(buffer); file.close(); 经过几次尝试,结果是file.read(buffer)读取的字符数正好是分配给buffer的字符数(在

我正在读取一个文件,其中包含:

char [] buffer = new char[300];
FileInputStream istream = new FileInputStream(path);
InputStreamReader file = new InputStreamReader(istream);
size = file.read(buffer);
file.close();
经过几次尝试,结果是
file.read(buffer)
读取的字符数正好是分配给buffer的字符数(在本例中为300,即使文件中有更多字符)

我可以依靠read()始终尽可能多地阅读,而不产生任何异常吗?
或者这是一项未记录的功能?

read方法说明中说:

从该读取器读取字符并将其存储在字符库中 从偏移量0开始的数组buf。返回字符数 实际读取或-1(如果已到达读取器的末尾)

这里没有提到缓冲区分配问题。
这是非常重要的,也是一件好事,它以这种方式工作,因为它允许您根据需要定义缓冲区的大小,并且不需要猜测,也不需要为异常编写代码。实际上,它是
read(char[]buffer)
,但它的工作原理是
read(char[]buffer,int size)

是的,您可以依赖此调用,除非发生api中已经提到的I/O错误

如果您查看
read(char cbuf[])
的代码,您会注意到它调用了方法
public int read(char[]buffer,int offset,int length)

来自Android源代码:

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

在您的实现中,您需要使用
file.read(buffer)
继续读取文件以获取剩余字节。
buffer
的内容需要附加到另一个将增长的缓冲区,这取决于您正在读取的文件的大小


您还可以使用方法
getTotalSpace()

分配具有文件大小的缓冲区,这不是我所要求的。但是你是对的,当你想读取整个文件时,你肯定应该这样做。无意冒犯,但是你能再解释一下你的断言的基础是什么,我们可以依赖我描述的read()行为吗?这里找到的javadoc可能会给出更好的解释:)