InputStreamReader.read()详解

 我来答
白露饮尘霜17
2022-06-19 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6749
采纳率:100%
帮助的人:37万
展开全部

在最一开始,我们先明确InputStreamReader和InputStream的区别:InputStreamReader用于读取字符,而InputStream用于读取字节

public abstract int read() throws IOException

从输入流中读取数据的一个字符(可以从中读入一个字节序列的对象称为输入流,这些字节序列可以来自文件、网络、内存块)。

以整数的形式返回读入的这个字符(其实就是ASC码) ,也就是一个0-255的整数。

如果已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

public int read(byte[] cbuf, int offset, int length) throws IOException

将输入流中最多 length个字符读入 byte 数组(缓冲区)。尝试读取 length 个字符,但读取的字节也可能小于该值。

以整数形式返回实际读取的字符数

如果已经到达流末尾而没有可用的字符,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

如果 len 为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字符。如果因为流位于文件末尾而没有可用的字字符,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。

将读取的第一个字节存储在元素 b[offset] 中,下一个存储在 b[off+1] 中,依次类推。读取的字符数最多等于 length。设 k 为实际读取的字节数,这些字节将存储在 b[offset] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1]的元素。

在任何情况下,b[0]到b[off]的元素以及b[off+len]到b[b.length-1]的元素都不会受到影响。

此方法重复调用方法 read()。如果第一次这样的调用导致 IOException,则从对 read(cbuf, offset, length) 方法的调用中返回该异常。如果对 read()的任何后续调用导致IOException,则捕获该异常并将其视为到达文件末尾;到达该点时读取的字符存储在 cbuf 中,并返回发生异常之前读取的字节数。在已读取输入数据len的请求数量、检测到文件结束标记、抛出异常前,此方法的默认实现将一直阻塞。建议子类提供此方法更为有效的实现。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式