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

时间:2017-08-03 02:17:45

标签: java sockets java-io

我正在学习Java IO和Socket,并对 socket.getInputStream()实际返回的内容感到困惑......

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

由于InputStream是一个抽象类,因此socket.getInputStream()必须返回InputStream的实例化子类。我使用上面的代码获取实际的类名,但 is.getClass()。getName()原来是

java.net.SocketInputStream

我试图在Eclipse中导入这个类,但没有发现这个类......

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

2 个答案:

答案 0 :(得分:5)

该课程为package-private。您无法直接从java.net包裹外部引用它。

答案 1 :(得分:2)

  

我试图在Eclipse中导入这个类,但没有发现这个类......

该类存在但仅包私有,因此公开。 这意味着只有当您的类也位于同一个包(java.net)内时,才能使用它。以下是access controls的小概述。

它显然位于包java.net内,名为SocketInputStream。它是从FileInputStream延伸的常规类。

以下是源代码:SocketInputStream at GrepCode

这是documentation。引用它:

  

此流扩展FileInputStream以实现SocketInputStream。请注意,此类不应公开。