2

available()在 Java 中用于套接字编程是否可靠?

我只关心它告诉我何时有可读取的字节,以便当我调用读取方法时它们不会阻塞。

BufferedInputStream.available()依靠InputStream.available().

InputStream.available() 的文档是这样说的:

请注意,虽然 InputStream 的某些实现会返回流中的字节总数,但许多不会。使用此方法的返回值来分配旨在保存此流中所有数据的缓冲区是不正确的。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()

我不在乎它是否给出了正确的字节数,只是当有字节可供读取时它不会给我 0 。我想知道 BufferedInputStream.available() 是否总是在 Windows 和 Linux 上用于此目的。

另外,我不确定文档中的“实现”是什么意思。那指的是什么?InputStream 的子类?不同操作系统上的Java?到不同的JVM?

有没有人在 Windows 或 Linux 或其他系统上使用 available() 并且它不起作用?

4

2 回答 2

2

您在问题中链接到的同一个文档说:

单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。

所以我会说它是“安全的”,因为当 I/O 不返回 0 时,它不会阻塞。另一方面,不能保证它会返回非零,事实上,要读取的字节。

请注意,这InputStream是一个抽象类,因此InputStream您拥有的任何对象都必须是子类。这就是文档所说的“实施”的意思。任何具体的子类都将实现所有抽象方法。

于 2012-08-23T01:23:38.937 回答
1

正如我在你的另一个线程中已经告诉你的那样,当包裹在 SSLSocket 上时它绝对可靠。它总是返回零。

于 2012-08-23T03:20:31.260 回答