Java DataInputStream、GZIPInputStream和InputStream差异

Java DataInputStream、GZIPInputStream和InputStream差异,java,io,gzipinputstream,Java,Io,Gzipinputstream,我知道, gzip输入流扩展充气器输入流扩展过滤器输入流扩展输入流和 DataInputStream extends FilterInputStream extends InputStream 我想知道以下两者的区别 InputStream mIstr1 = new DataInputStream(new GZIPInputStream(mUConn.getInputStream())); InputStream mIstr2 = new GZIPInputStream(mUConn.get

我知道,

gzip输入流扩展充气器输入流扩展过滤器输入流扩展输入流

DataInputStream extends FilterInputStream extends InputStream 
我想知道以下两者的区别

InputStream mIstr1 = new DataInputStream(new GZIPInputStream(mUConn.getInputStream()));
InputStream mIstr2 = new GZIPInputStream(mUConn.getInputStream());
InputStream mIstr3 = new DataInputStream(mUConn.getInputStream());
InputStream mIstr4 = mUConn.getInputStream();
mUConn
是一个
httpurl连接

我担心的是

  • 在什么情况下我们必须将InputStream作为 数据输入流中的GZIPInputStream
  • 在什么情况下我们必须将InputStream作为 GZIPInputStream
  • 在什么情况下我们必须将InputStream作为 数据输入流

它们实际上是完全不同的类,文档应该很好地描述每个类的用途

是否要使用
DataInputStream
中的方法,这些方法涉及以文档化的方式从流中读取基元类型和字符串?如果是,使用
DataInputStream
包装原始流;否则不要


原始流是否包含用gzip算法压缩的数据?如果是,请使用
gzip输入流
;否则不要。我不希望来自
HttpURLConnection
的输入流显示gzip压缩数据;我希望HTTP库能够根据头执行适当的膨胀,但它们在这里可能是“愚蠢的”。(如果是这样的话,您可能希望找到其他库。)

谢谢您的回答,Jon。如果我愿意使用DataInputStream中的方法,我确实可以用DataInputStream包装InputStream。但如果是这样,我必须将其声明为DataInputStream而不是InputStream,对吗?如果声明类型为InputStream,那么当InputStream被视为DataInputStream时,与InputStream被视为原样时,是否有任何区别?我的意思是,如果我将InputStream mIstr3=新的DataInputStream(mUConn.getInputStream()),是否会有任何问题;作为InputStream mIstr3=mUConn.getInputStream()@纳马尔弗南多:可能会有一些微妙的区别,但除了其他任何东西,这将是毫无意义的和分散注意力的。如果您只需要
InputStream
中的方法,为什么要包装它呢?永远不要仅仅为了它而做任何事。是的,乔恩,完全同意你。实际上,我正在重构以前实现的代码。我在代码之间找到了这个,这就是我提出这个问题的原因。非常感谢。您不了解各个类的Javadoc的哪一部分?这些都有记录。你不需要咨询论坛来解决这类问题。。。事实上,我已经看过这些文件了。但我决定在论坛上请iy澄清我自己