黑马程序员技术交流社区
标题:
read()方法内部
[打印本页]
作者:
盛光富
时间:
2012-5-11 22:42
标题:
read()方法内部
本帖最后由 盛光富 于 2012-5-11 22:44 编辑
帮忙解下困惑在IO流中
read()方法从文件中读取一个字节, 字节的范围是-128到127.将读取到的byte & 255, 正数值不变, 负数高位补0转为了正数,那读到末尾的时候不是-1吗?这个时候是不是也会转为正数呢?
作者:
黑马-王建雨
时间:
2012-5-11 23:53
以前这样的问题我也纠结过
其实这样的写法可读性并不是很好,我把代码翻译一下,你应该就能看懂了
原始代码:
int temp = 0;
while((temp = input.read())!=-1){
b[len] = (byte)temp ;
len++ ;
}
翻译后的代码:
int temp = 0;
temp = input.read();
//通过输入流读取一个字节
while (temp != -1) {
//只要temp的值不是-1,就继续循环
b[len] = (byte)temp ;
len++;
temp = input.read();
//再次通过输入流读取下一个字节
}
这样看的话,楼主的问题就一目了然了
read()每次执行的时候的确只读一个字节
但是由于在第一种写法中,每次循环的时候,read()方法是在while中调用的
所以,在while的判断条件中,实际上执行的是3个操作
第一个操作:input.read();
//通过输入流读取一个字节
第二个操作:temp = input.read();
//将读取到的字节赋值给temp
第三个操作:while(temp != -1);
//判断读取到的字节是否为-1
这个问题带来的收获有两个:
第一:写程序的时候要注重代码的可读性,尽量不要在一行代码中包含过多的逻辑
第二:不管在什么地方调用read()方法,只要调用了read()方法,那么输入流就一定会去读取一个字节
声明:非原创。我收藏的一个答案。很不错哦,分享吧。共同努力,一起进步。
作者:
李啸
时间:
2012-5-11 23:56
简单的说 你把一个byte类型的数据进行了与(&)255运算这是一个类型的提升 得到的是一个int类型的永远是一个正数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2