System.in中的read()方法

更新时间:2023-04-24 11:31:14 阅读: 评论:0


2023年4月24日发(作者:足责)

中的read()⽅法

⼤家先来看如下这个程序

public class TestInputStream {

public static void main(String args[]) throws IOException {

InputStream三分钟朗诵 in = ;

int a = ();

豆子的生长过程 n(a);

a 就职演讲稿 = ();

n(a);

a = ();

n(a);

}

}

问题⼀:如果输⼊”a“,那么会输出什么呢?

事实上我输⼊“a”,它并没有反应

问题⼆:如果输⼊“a”并按下了回车,那么会输出什么呢?

97 13 10,并且程序结束运⾏

问题三:如果只按下回车,那么会输出什么呢?

13 10,并且程序未结束运⾏

问题四:如果输出“abc”,那么会输出什么呢?

97 98 99

好了,例⼦将完了,下⾯来分析下上⾯4种情况

⾸先我们需要知道到底是苹果的英语怎么说 什么?

直接输出我们可以发现它是⼀个BufferedInputStream

那么()是如何运作的?

我们可以粗略的扫⼀下源码

private void fill() throws IOException {

byte[] buffer = getBufIfOpen();

if (markpos < 0)

pos = 0; /* no mark: throw away the buffer */

el if (pos >= ){ /* no room left in buffer */

// 这⾥是设置了mark之后的操作,不需要关⼼

}

count = pos;

int n = getInIfOpen().read(buffer, pos, - pos);

if (n > 0)

count = n + pos;

}

其中buffer是BufferedInputStream的缓冲区,read(byte[] b, int off, int len)⽅法是从底层输垃圾分类英语作文 ⼊流读取数据,该⽅法为阻塞⽅法,那么

什么时候会返回呢?

调试进去发现,中底层输⼊流为FileInputStream,根据官⽅⽂档上的描述:

1、如果 len 不为 0,则在输⼊可⽤之前,该⽅法将阻塞

2、返回读⼊缓冲区的字节总数,如果因为已经到达⽂件末尾⽽没有更多的数据,则返回 -1

那么对于控制台输⼊该如何判断达到“⽂件末尾”呢?通过回车来提交数据,并告诉程序提交完毕。

下⾯针对上⾯的问题⼀⼀解答

1、由于在控制台输⼊时,按下回车键才代表输⼊完成,输⼊的内容才会提交到read()⽅法,所以按下回车之前,程序是不知道你输⼊了什

么的

2、输⼊"a"后按下回车,这时候read()⽅法读到了数据,此时buffer中的数据应该是97 13 10,也就是字符'a','r', 'n',并且read()⽅法

每次只能从缓冲区中读出⼀个微笑人生 字符,三次read()就刚好读出这3个字符,之后程序就结束了。

3、只按下回车,此时从流中只读到了"r"和"n",由于没有⾜够的输⼊,那么第三次调⽤read()时阻塞

4、输⼊"abc",此时从流中读到"a","b","c","r","n",由于只read()了3次,那么读出abc,r和n仍在buffer中


本文发布于:2023-04-24 11:31:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/845877.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:99read
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图