Java URLConnection';s getInputStream()每次都返回相同的InputStream?
从URLConnection获取InputStream非常常见,如下所示:Java URLConnection';s getInputStream()每次都返回相同的InputStream?,java,android,inputstream,urlconnection,Java,Android,Inputstream,Urlconnection,从URLConnection获取InputStream非常常见,如下所示: InputStream stream = connection.getInputStream(); 其中连接是URLConnection 我有一个想重用流的情况。我有权访问connection对象,现在的问题是URLConnection的单个实例是否每次都返回“相同”的InputStream?也就是说,如果我再次调用connection.getInputStream()(但对于同一个连接对象),我会得到一个新的流吗
InputStream stream = connection.getInputStream();
其中连接是URLConnection
我有一个想重用流的情况。我有权访问connection对象,现在的问题是URLConnection的单个实例是否每次都返回“相同”的InputStream?也就是说,如果我再次调用connection.getInputStream()(但对于同一个连接对象),我会得到一个新的流吗 一般来说,这类问题(“X做Y吗?”)的答案是:文档上说X做Y吗?如果是,是的(或者它坏了);如果没有,你没有保证,必须假设没有 让我们看看: 返回从该打开连接读取的输入流。如果读取超时在数据可供读取之前过期,则从返回的输入流读取时会引发SocketTimeoutException 返回: 从这个打开的连接读取的输入流 所以你不能指望它这么做,因为它不能保证。(我还在JavaDoc的其他地方查找了
URLConnection
)
(我在Android之外的测试表明,
HttpURLConnection
至少有时会这样做。)URLConnection
是一个接口,如果getInputStream
返回新的流与否,这完全取决于实现者
验证这一点的最佳方法是
URLConnection con = new URL(MY_URL_STRING).openConnection() ;
InputStream in1 = con.getInputStream();
InputStream in2 = con.getInputStream();
boolean streamEquals = in1.equals(in2);
没关系。不管是做还是不做都没什么区别。考虑一种方法,它总是返回<代码>新DATAN(Socket .GETIN)(<代码>)。(我并不是说它是这样实现的:我们只是在考虑。)除了将它与
==
进行比较之外,没有什么实际的方法可以告诉您每次这样做时它是一个新流还是始终是同一个流。您从中读取的内容不受影响