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

为什么java.net.SocketInputStream不存在?,java,sockets,java-io,Java,Sockets,Java Io,我正在学习Java IO和Socket,对Socket.getInputStream()实际返回的内容感到困惑 InputStream is = socket.getInputStream(); System.out.println(is.getClass().getName()); 由于InputStream是一个抽象类,socket.getInputStream()必须返回InputStream的实例化子类。我使用上面的代码获取实际的类名,但是是.getClass().getName()结

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

InputStream is = socket.getInputStream();
System.out.println(is.getClass().getName());
由于InputStream是一个抽象类,socket.getInputStream()必须返回InputStream的实例化子类。我使用上面的代码获取实际的类名,但是是.getClass().getName()结果是

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

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

类是。您不能直接从
java.net
包外部引用它

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

该类存在,但它仅为包私有,因此不为公共。 这意味着您只能在类也位于同一个包(
java.net
)中时使用它。下面是对该应用程序的一个小概述

它显然位于包
java.net
中,名为
SocketInputStream
。它是从
FileInputStream
扩展而来的常规类

以下是源代码:

这是我的答案。引述:

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


如果你阅读javadocs,你会看到直接的已知子类:AudioInputStream、ByteArrayInputStream、FileInputStream、FilterInputStream、InputStream、ObjectInputStream、PipedinInputStream、SequenceInputStream、StringBufferInputStream。我有办法看到这个类的源代码吗?@JingHe当然,它在源代码zip中。它通过
FileDescriptor
构造函数扩展了
FileInputStream
,非常有趣,它还提供了一些东西来关闭流中的套接字。否则就没什么意思了,走吧,明白了。谢谢!