为什么java.net.SocketInputStream不存在?
我正在学习Java IO和Socket,对Socket.getInputStream()实际返回的内容感到困惑为什么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()结
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
,非常有趣,它还提供了一些东西来关闭流中的套接字。否则就没什么意思了,走吧,明白了。谢谢!