当我用fileinputstream流读取文件的时候,然后用fileinputstream.read()方法读取文件的时候,当我查看API的时候,发现read()是读取每个字节,然后返回一个int类型,有没有很纳闷,读取的字节,为什么返回一个int呢?
FileInputStream.read()读取一个byte却返回一个int的原因如下:
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111
那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上
24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型
FileInputStream.read()返回一个unsigned byte [0 - 255],而java里面没有这个类型,所以用int接收。byte的范围是[-128,127],所以如果read()返回的数在[128,255]的范围内时,则表示负数,即
(byte)128=-128
(byte)129=-127
(byte)255=-1
所以如果read()返回的是byte的话,那就会有负数。而"返回-1意味着结束",这个信息量用byte是无法表达的,所以必须用int。

原文链接:https://blog.csdn.net/zhaomengszu/article/details/54562056

FileInputStream.read()返回int类型原因相关推荐

  1. getchar返回int类型

    #include <stdio.h> /* copy input to output; 2nd version */ main() { int c; c = getchar(); whil ...

  2. Java返回int型的空值_使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法...

    当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType ...

  3. “GetDocument”: 缺少返回类型;假定为返回“int”的成员函数

    在编译时出现: 1>正在编译... 1>PreviewDlg.cpp 1>d:\zac\project\vs2008\projects\dipalgorithm\dipalgorit ...

  4. mysql int和bigdecimal,mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象

    用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...

  5. Jquery ajax 返回string类型加result.d原因

    啥叫异步,啥叫Ajax.咱不谈啥XMLHTTPRequest.通俗讲异步就是前台页面javascript能调用后台方法.这样就达到了无刷新.所谓的Ajax.这里我们讲二种方法 方法一:(微软有自带Aj ...

  6. mal是什么类型对应的java类型是什么,【Java】mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象...

    用的是Map,List>接收, sql语句中int类型的值做了聚合运算, 满足上述两个条件. java中去取value的值就会变成BigDecimal 类型 经过实测:mybatis 中的sql ...

  7. c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...

    Go返回int64类型字段超出javascript Number范围的解决方法 最近在项目中,一个go服务给前端提供了一个接口,返回json格式数据,其中Int64字段会超出javascript Nu ...

  8. Java byte类型转换成int类型时需要 0XFF的原因

    Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b  = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...

  9. println()函数输出int类型返回值错误的问题

    out.println(); 在用这个语句输出其他类返回大的int类型的数据的时候,注意输出错误. 例如: out.println(class1.方法()):  导致错误: our.println(c ...

  10. FTPClient.storeFile返回false的原因

    FTPClient.storeFile()返回false的原因 Debug搞了一晚上,什么都看过了,最后总算是自己茅塞顿开发现了问题. FTPClient会返回false的原因有很多, 首先有编码错误 ...

最新文章

  1. 单例模式(Singleton)
  2. 使用ST05 研究product extension field deletion
  3. 60、date的使用
  4. 数列极差(信息学奥赛一本通-T1427)
  5. 鸿蒙系统对小米的影响,“小米用鸿蒙系统”乌龙会对后续有影响吗
  6. fastJson工具类
  7. 数学式子中arg min,arg max的含义
  8. 微信公众平台客户端调试工具
  9. SyntaxError: unexpected EOF while parsing成功解决
  10. python中win32api_Python win32api.SetCursorPos方法代码示例
  11. 标准音阶及常用乐器频率范围对照表(完全版)
  12. .bat文件创建和编辑方法
  13. 360安全卫士添加信任区
  14. http url转义字符,特殊字符
  15. TCP长连接及连接管理
  16. 使用 lxml 中的 xpath 高效提取文本与标签属性值
  17. 下载vimeo视频_使用Vimeo的API和Slim构建基本的视频搜索应用
  18. 小数分频器vhdl实现_基于FPGA的小数分频器的设计与实现.doc
  19. 【历史上的今天】8 月 4 日:第一位图灵奖女性得主;NVIDIA 收购 MediaQ;首届网络安全挑战大赛完成
  20. AD18中高速信号等长线使用

热门文章

  1. 免费查询IP的API
  2. note同步不及时 one_如何提高onenote同步速度?
  3. 实验——贝叶斯决策论预测贷款是否违约
  4. 如何创建自己的Cydia源
  5. 电子线路与电磁干扰/电磁兼容设计分析
  6. (八)RHEL系统之红帽8操作系统基础环境配置及软件安装
  7. 秋季吃哪些食物可以改善心情?
  8. matlab红外遥感温度反演,热红外遥感地表温度反演研究现状与发展趋势
  9. Quora的技术探索
  10. Jlink V8 在 Keil MDK5.25 中无法正常烧写、调试程序的故障处理