有什么区别
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }

两者都能确定网络流终止吗?

解决方法

InputStream.read()的Javadocs说:

If the length of b is zero,then no bytes are read and 0 is returned

在正常使用中,这种情况永远不会发生,因此明确地测试这种情况并没有多大意义. (如果你想避免永远循环,因为在这种情况下缓冲区是零长度和快速失败,只需测试缓冲区的长度.)

还有,有:

Returns: the total number of bytes read into the buffer,or -1 if there is no more data because the end of the stream has been reached.

如果要测试文件结束(或网络流,或其他),请使用测试:

if ( inputStream.read(buffer) != -1 ) ...

非bug的Java实现永远不会返回任何其他内容,以表明没有更多的数据可用.

java – 输入stream.read返回0或-1?的更多相关文章

  1. android – 如何实现消息读取状态,如whatsapp蓝色刻度?

    我正在开发一个应用程序,聊天是一个模块,聊天我正在使用xmpp.当我发送消息时,我使用DeliveryReceiptManager获取该消息传递状态.但我需要表明该消息是用户READ或NOTwhatsApp蓝色tickmark,任何人都可以帮助我,我被击中了.如何实现此消息读取概念.提前致谢.解决方法创建自定义数据包扩展类当进入聊天列表时发送具有相同包ID的消息标签其中mConnection是xm

  2. 如何在Android上解锁InputStream.read()?

    我有一个线程,其中在循环中调用InputStream的read()方法.当没有更多字节要读取时,流将阻塞,直到新数据到达.如果我从另一个线程调用InputStream上的close(),则流将关闭,但阻塞的read()调用仍然被阻止.我假设read()方法现在应该以值-1返回以指示流的结束,但它不会.相反,它会被阻塞几分钟,直到发生tcp超时.如何取消阻止close()调用?

  3. android – 抛出IOException时我们是否需要使用HttpURLConnection的错误流

    根据OracleJava的技术指南,我们应该在抛出IOException时使用HttpURLConnection的错误流http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.htmlWhatcanyoudotohelpwithKeep-Alive?Donotabandonaconnectionbyignor

  4. 如何从蓝牙条码扫描器读取数据符号CS3070到Android设备

    在我的项目中,我必须使用条形码扫描器SymbolCS3070通过蓝牙阅读条形码.即;我必须通过蓝牙建立Android设备和条码扫描器之间的连接.任何人都可以告诉我如何从条形码阅读器读取值,以及如何设置通信?>>首先,您必须扫描手册中的“串行端口配置文件”中的条形码.这是我工作代码的不完整版本,但你应该得到要点.我希望这个解决方案也适合你!

  5. python文件读取read及readlines两种方法使用详解

    这篇文章主要为大家介绍了python文件读取read及readlines两种方法的使用示例及区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  6. jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法

    这篇文章主要介绍了jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法的相关资料,需要的朋友可以参考下

  7. jQuery的Read()方法代替原生JS详解

    众所周知在jQuery中ready方法在DOM完全下载后立即执行其中的代码。因为它是等所有的DOM元素都加载完毕,才执行给定的函数,所以你能确定那些试图操作和访问元素节点的方法都能被执行。而这篇文章给大家介绍的是如何用jQuery的Read()方法代替原生JS,下面来一起看看。

  8. python面试题之read、readline和readlines的区别详解

    当python进行文件的读取会遇到三个不同的函数,它们分别是read(),readline(),和readlines(),下面这篇文章主要给大家介绍了关于python面试题之read、readline和readlines区别的相关资料,需要的朋友可以参考下

  9. Windows和Linux之间Java套接字的差异 – 如何处理它们?

    为什么在Linux上这些例外不会在Windows上被抛出?

  10. 分段错误:当bufffer> 4M时,在Ubuntu中的C程序中进行堆栈分配

    ,2^i,其中i=0..30这是我如何编译它的一个例子:gcc-DBUFFERSIZE=8388608prog_sys.c-obin/psys.8M问题:在我的机器中,该程序的所有版本都可以正常工作:./psys.1M

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部