黑马程序员技术交流社区

标题: IO流中的字节流read()方法 [打印本页]

作者: 庄承荣    时间: 2011-11-2 00:16
标题: IO流中的字节流read()方法
和大家分享一下今天视频学习中提到的一个问题:字节流对象如InputStream中的read()方法,为何返回的是 int 类型 ,而不是 byte 类型 ?
作者: qy    时间: 2011-11-2 00:26
因为在硬盘读取内容时,是一个字符一个字符读取的。返回的是读取的个数
作者: 宿万涛    时间: 2011-11-2 00:54
read方法 int read();输入流调用read方法顺序的读取源中的单个字节数据,该方法返回字节值(0~255之间的一个整数)
read方法的另外两个形式:int read(byte b[]),int read(byte[],int off,int len)这俩个形式都能使程序把多个字节读到一个字节数组中,第一个方法将试图从文件读取b.length个字节,并将读取的字节存放在数组b中,第二个方法试图读取len个字节。这两个read方法都返回实际读取的字节个数!
作者: 白倩    时间: 2011-11-2 07:56
read()是返回读取的字节数,方法的返回值是一个整数!
作者: 秦冲    时间: 2011-11-2 08:05
假如读取的数据为二进制形式的“11111111”,那么int类型的值将会把最后一个字节的8位填充为“11111111”,其他24个高位全部用“0”补充,那么它的值是255,如果返回值是byte类型的话,那么“11111111”的值表示十进制的-1,这时就跟read()读到流的末尾时返回的-1是有冲突的。这个返回值跟强制转换是不一样的。byte b = -1;  //这时他的二进制形式是“11111111”;强制转换到int类型的值的话,其他24个高位将会全部用“1”填充,也就是32位的“1”来表示-1。
作者: olkldksl    时间: 2011-11-2 08:11
这是因为读取的有可能不光是文本文件,还可能读取像图片或者影音之类的媒体,读取的字节就可能全部位上都是连续的1,值也就是-1,但是这时候还没到文件末尾,判断条件判断到这时候就会退出。
那么可以把读取的字节提升成一个int型,但是提升后的还是一个-1,这是因为把int数的前24位也赋值成了1,就可以把读取的int数与操作上一个255,因为读取的就是后8位,把前24屏蔽掉就好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2