为什么 java.net.SocketInputStream 不存在?

Why does java.net.SocketInputStream not exist?

我正在学习 Java IO 和套接字,但对 socket.getInputStream() 实际上 return 的作用感到困惑...

InputStream is = socket.getInputStream();
System.out.println(is.getClass().getName());

由于 InputStream 是抽象 class,socket.getInputStream() 必须 return InputStream 的实例化子 class。我使用上面的代码获取实际的 class 名称,但 is.getClass().getName() 结果是

java.net.SocketInputStream

我试图在 Eclipse 中导入这个 class,但没有找到 class...

那么到底发生了什么?我是否误解了 Java 的某些部分?

class 是 package-private。您不能直接从 java.net 包外部引用它。

I tried to import this class in Eclipse and found no this class...

class 存在,但它只是 package-private,所以 不是 public。 这意味着您只能在 class 也在同一个包内 (java.net) 时使用它。这是 access controls.

的一个小概览

明明在包裹java.net里面,叫做SocketInputStream。它是从 FileInputStream.

扩展而来的常规 class

这里是源代码:SocketInputStream at GrepCode

这里是 documentation。引用它:

This stream extends FileInputStream to implement a SocketInputStream. Note that this class should NOT be public.