0

我正在阅读一个文件:

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() 总是尽可能多地阅读而不产生任何异常吗?
或者这是一个未记录的功能?

读取方法描述说:

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

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

4

1 回答 1

1

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

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

来自安卓源代码:

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

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

您还可以使用该方法分配具有文件大小的缓冲区getTotalSpace()

于 2013-02-24T14:42:31.317 回答