什么时候是InputStream.available()
或BufferedInputStream.available()
在Java的socket编程中有用?什么时候InputStream.available()有用?
回答
我的看法是,除非你知道“估计”有多好,否则这种方法是无用的。在连接到插座的情况下,估计在任何情况下都不可靠。
问题是该方法的返回值并没有区分套接字上到达流结束的情况,也没有在套接字上可用的字符当前,但可能会传递更多字符。根据javadoc,两者都可以归零。
这种不确定性使得该方法几乎没用。
在插座的情况下(以及类似的),该
available()
方法并没有真正告诉你是否读取或没有,如果结果是零。而如果你做出了错误的选择,你会在你不想要的时候阻止,或者从未发现套接字已经关闭。其中任何一个都可能是坏的。在其他情况下(如从本地文件读取),也有发现读取是否有可能阻止其他方式。此外,阅读不太可能阻止很长时间,所以在避免阻止方面通常没有多大意义。
最后,在某些情况下,我认为你可以得到一个非零响应,并具有读取调用块呢。 (我想在远程安装的文件系统的文件...和远程服务器冻结的可能性,当你尝试读取。)
的底线是available()
记录为返回一个估计。 javadoc并不保证在所有可能的情况下估算的可靠程度如何,实际上在某些情况下估算不准确,因为这需要了解远程服务器将要做什么。
”单个读取或跳过这么多字节不会被阻塞,但可能会读取或跳过更少的字节。“ < - 这是我以前用过的东西。那么,没用?不为。 (虽然一些执行者*只*返回0所以..) – 2012-08-22 23:37:38
@pst:我想你的观点是你不能真正依赖任何给定的实现给你回有用的东西。在你的程序中,它将如何处理始终返回0的InputStream?你永远不会读它吗? –
@MarkPeters我会知道我正在处理的实现。尽可能多的乐趣,因为它很好,相信一个接口或抽象类可以捕获所有不同的来源/体系结构中的所有东西..老实说,虽然对于“套接字”,我会使用NIO(或更好,它的包装)。 – 2012-08-22 23:39:56
- 1. 为什么InputStream.available()这么耗时?
- 2. 什么时候ConcurrentSkipListSet有用?
- 3. 什么时候__proto__有用?
- 4. 什么时候File.join有用?
- 5. QTreeWidget :: currentItem什么时候没有选择什么时候返回?
- 6. 什么时候应该使用AWS,什么时候不使用
- 7. intn_t什么时候使用它,什么时候不使用
- 8. 什么时候应该使用async/await,什么时候不用?
- 9. 什么时候使用ByteString,什么时候不使用?
- 10. 什么时候使用__proto__和什么时候使用原型
- 11. 什么时候使用Ruby和什么时候使用PHP
- 12. 什么时候创建了app.config,什么时候app.exe.config和有什么区别
- 13. 什么时候HTTP 404有用,什么时候应该考虑503?
- 14. 什么时候使用GWT,什么时候不需要
- 15. ZF2什么时候使用getServiceLocator()什么时候不到
- 16. SQL Server CASE什么时候不使用CASE什么时候
- 17. 变量变量:什么时候有用?
- 18. 什么时候循环有用?
- 19. 守护线程什么时候有用?
- 20. dynamic_cast <void*>什么时候有用?
- 21. 什么时候ASP.NET Expression Builders最有用?
- 22. 什么时候是SqlConnection.RetrieveStatistics()有用?
- 23. 什么时候调用setDataTimeout?
- 24. 什么时候使用uncaught_exception?
- 25. 什么时候用短?
- 26. 什么时候调用webview.clearData
- 27. 什么时候DataView可用?
- 28. 什么时候使用vtable?
- 29. 什么时候调用robot.cleanUp()
- 30. 什么时候使用sIFR?
如果在没有可用输入时调用阻塞的'read'方法会发生什么? “available”的文档说什么? -1,因为没有显示任何先前的研究,也没有给出任何上下文(例如,包括来自文档或经验的某些内容或者*当前问题*以进一步优化问题)。另请注意,InputStream是* abstract *。 – 2012-08-22 23:22:14
返回可从此输入流读取(或跳过)的字节数的估计值,而不会因为此输入流的下一次方法调用而被阻止。下一次调用可能是同一个线程或另一个线程。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available() – kosa
您从文档中无法获得的任何特定措词? – kosa