我正在学习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的某些部分?
答案 0 :(得分:5)
该课程为package-private。您无法直接从java.net
包裹外部引用它。
答案 1 :(得分:2)
我试图在Eclipse中导入这个类,但没有发现这个类......
该类存在但仅包私有,因此不公开。
这意味着只有当您的类也位于同一个包(java.net
)内时,才能使用它。以下是access controls的小概述。
它显然位于包java.net
内,名为SocketInputStream
。它是从FileInputStream
延伸的常规类。
以下是源代码:SocketInputStream at GrepCode
这是documentation。引用它:
此流扩展FileInputStream以实现SocketInputStream。请注意,此类不应公开。