JAVA中read()是如何读取字符的、read()的返回值为什么要赋给整型变量?配合available读取字长时它们的工作原理是什么?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42305808/article/details/83215551

最近,本人初学Java中有关文件输入输出时,遇到了一些疑惑,给大家看一段利用read()读取文档字符并将字符输出到屏幕的代码片段:

其中“测试.txt”文档中存放的字符串是“aaaaaa”,运行结果为:

可能很多初学者像我一样都对while循环中的语句有以下疑惑:

1、fin.available()是用来计算可读文件的的字长的,应该是恒大于零的,那岂不是死循环?(猜想fin.available()是递减的)

2、fin.read()从文档中读取的应该是字符,那为什么赋给整型变量data呢?(猜想read()是将字符转换为Ascll码)

为了验证,于是我在代码中加入了以下两句:

结果显示:

从输出结果可以看出:

1、(读取的位置就像这根竖线一样向后移动“|aaaaaa->a|aaaaa->aa|aaaa->aaa|aaa->aaaa|aa->aaaaa|a->aaaaaa|”)

一开始起始位置在字符串最前端,循环中每经过一次read(),读取的位置就自动向后移一位字符,fin.available()是从读取的位置向后计算还有多长的字节可以读取,因此,fin.available()是一直递减,直至读取的位置移到字符串末尾,fin.available()变为0,读取循环结束;

2、输出的data值就是字符的Ascll码,然后write(data)再将Ascll码转换为字符显示出来;

 

以上纯属个人试验后的理解,欢迎交流指正。

展开阅读全文

没有更多推荐了,返回首页