问题描述
字节流的read()方法,为什么返回的不是byte型,而是int型?read()方法读到末尾返回-1,在操作数据时很容易出现连续多个1的情况,而连续读到8个1,就是-1,是什么意思??谢谢
解决方案
解决方案二:
这个read()的放回类型必须是int。你去看j2se的api上面有。
解决方案三:
估计是int比较通用直接用byte可能会有问题把byte存在int里也不会精度丢失
解决方案四:
对返回的-1进行判断啊,通常用while循环,读出文件中的数据。举个例子:publicstaticbyte[]readInputStream(InputStreaminstream)throwsException{ByteArrayOutputStreambaos=newByteArrayOutputStream();byte[]buffer=newbyte[1*1024];intlength=0;while(-1!=(length=instream.read(buffer))){baos.write(buffer,0,length);}instream.close();returnbaos.toByteArray();}
解决方案五:
返回值是读入缓冲区的总字节数,用int更方便些吧,不然你和-1比较的时候,还是要转成int吧!
解决方案六:
引用3楼u012301841的回复:
对返回的-1进行判断啊,通常用while循环,读出文件中的数据。
引用4楼longtian1213的回复:
返回值是读入缓冲区的总字节数,用int更方便些吧,不然你和-1比较的时候,还是要转成int吧!
他问的应该是intread(),不是intread(byte[]buf)
解决方案七:
intread()方法读一个字节,那么这个字节的范围就可能是-128~127(byte类型的范围),包括了-1,如果返回值为byte,那我问你如何表示已读到流末尾?如果返回一个byte类型的-1,那它到底是数据,还是表示流末尾?所以当然只能用范围比byte大的类型表示,而short实际上空间占用和int一样,而且Java默认数值类型是int,所以为了方便,直接返回int类型,当返回值是-1时表示流结束,返回值是0~255时表示数据。你所说的8个1表示-1是完全错误的想法,read方法返回的是字节,不是位,8个字节1就是8个字节1,8位1才是无符号数值255,有符号数值-1。
解决方案八:
引用5楼vnvlyp的回复:
Quote: 引用3楼u012301841的回复:
对返回的-1进行判断啊,通常用while循环,读出文件中的数据。引用4楼longtian1213的回复:
返回值是读入缓冲区的总字节数,用int更方便些吧,不然你和-1比较的时候,还是要转成int吧!他问的应该是intread(),不是intread(byte[]buf)
应该是我理解错了