为什么 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.
我正在学习 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
.
这里是源代码:SocketInputStream at GrepCode
这里是 documentation。引用它:
This stream extends FileInputStream to implement a SocketInputStream. Note that this class should NOT be public.