Android Inputread流是否准确读取给定的缓冲区大小?

时间:2013-02-24 11:55:48

标签: 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)正好读取了为缓冲区分配的字符数(在这种情况下,300,即使该文件中有更多的characers)。

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

读取方法描述说:

  

从此阅读器中读取字符并将其存储在角色中   数组buf从偏移量0开始。返回字符数   实际读取或-1如果已达到读者的结尾。

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

1 个答案:

答案 0 :(得分:1)

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

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

分配具有文件大小的缓冲区