IO中read()方法解释

问题描述

字节流的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)

应该是我理解错了

时间: 2024-09-29 21:38:16

IO中read()方法解释的相关文章

java.io 中不使用close()方法资源为何cg无法回收?

问题描述 java.io 中不使用close()方法资源为何cg无法回收? 如题,new FileInputStream()新建的文件流都必须要调用close()方法关闭,close方法的介绍是关闭和释放系统资源,并且如果未使用则会资源泄露. 但当指向 FileInputStream()对象的指针离开该对象,CG不是应该回收资源么,用new创建的对象都在栈中,为什么这个FileInputStream()不会自己回收呢? 解决方案 文件流对像不样,不是由虚拟机来掌握的.文件流一般申请的空间是直接到

android中setVisibility()方法失效了

问题描述 android中setVisibility()方法失效了 在viewpager中嵌入fragment,然后通过菜单键改变布局,调用setVisibility()方法的时候无效,百度一下看到有人说调用clearAnimation()能解决,试了下,还是不行...菜鸟求解释... 解决方案 android view的setVisibility方法值的意思android view的setVisibility方法值的意思android view的setVisibility方法值的意思 解决方案

JAVA中toString方法的作用

以下是对在JAVA中toString方法的作用进行了详细的分析介绍,需要的朋友可以参考下   因为它是Object里面已经有了的方法,而所有类都是继承Object,所以"所有对象都有这个方法". 它通常只是为了方便输出,比如System.out.println(xx),括号里面的"xx"如果不是String类型的话,就自动调用xx的toString()方法 总而言之,它只是sun公司开发java的时候为了方便所有类的字符串操作而特意加入的一个方法  回答补充:写这个

详解Android中Drawable方法_Android

本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下 1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下: <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:antialias="true" android:dither="true" android:filter=&

在C#代码中应用Log4Net(三)Log4Net中配置文件的解释

一个完整的配置文件的例子如下所示,这个是"在C#代码中应用Log4Net(二)"中使用的配置文件. <log4net> <!-- 错误日志类--> <logger name="logerror"> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <!-- 信息日

fileoutputstream-关于java的IO中PrintWriter问题

问题描述 关于java的IO中PrintWriter问题 public class PrintIOTest { public static void main(String[] ages){ try{ FileOutputStream fos = new FileOutputStream(""test.txt""); PrintStream ps = new PrintStream(fos); ps.print(""helloworld!&quo

struts2中action中的方法无故被提交两次

问题描述 struts2中action中的方法无故被提交两次 import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.hsp.book.domain.Book;import com.hsp.book.service.BookService;import c

javascript-怎么用ajax访问action中的方法

问题描述 怎么用ajax访问action中的方法 本来是跳转到新页面显示错误信息,现在需要在点击按钮时,就直接在原来的页面上弹出提示信息. action中的方法如下: public String sendEmail() throws Exception { MailBean mailBean = setMailBean(); try { if(!isWriteRight(mailBean,mailInfoFB.getTo())){ mailInfoFB.setSended(false); mai

php中异常处理方法小结_php技巧

本文实例总结了php中异常处理方法.分享给大家供大家参考.具体分析如下: 当异常被触发时,通常会发生:在PHP5中添加了类似于其它语言的错误异常处理模块.在 PHP代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常.每一个 try 至少要有一个与之对应的 catch. 使用多个 catch 可以捕获不同的类所产生的异常,当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP