从URLConnection获取一个InputStream非常常见:
InputStream stream = connection.getInputStream();
其中连接是URLConnection
。
https://developer.android.com/reference/java/net/URLConnection.html#getInputStream()
我有一种情况,我想重用一个流。我有权访问连接对象,现在我的问题是URLConnection的单个实例每次都返回'相同'的InputStream吗?也就是说,如果我再次调用connection.getInputStream()(但是对于相同的连接对象),我将获得一个新流吗?
答案 0 :(得分:1)
一般来说,这类问题的答案(" X做Y?")是:文档说 X是否做Y?如果是的话,是的(或者它被打破了);如果没有,你没有保证,所以必须不承担。
让我们看一下URLConnection#getInputStream
's documentation:
返回从此打开的连接读取的输入流。如果读取超时在数据可用于读取之前到期,则从返回的输入流读取时可能抛出SocketTimeoutException。
<强>返回:强>
从此打开的连接读取的输入流。
所以你不能依赖这样做,因为它没有做出承诺。 (我还在JavaDoc的其他地方寻找过URLConnection
。)
(我在Android之外的测试表明HttpURLConnection
至少有时会这样做。)
答案 1 :(得分:0)
URLConnection
是一个接口,如果getInputStream
返回新的流,它都取决于实现者。
验证这一点的最佳方法是......
URLConnection con = new URL(MY_URL_STRING).openConnection() ;
InputStream in1 = con.getInputStream();
InputStream in2 = con.getInputStream();
boolean streamEquals = in1.equals(in2);
答案 2 :(得分:0)
没关系。它是否成功也没有任何区别。考虑始终返回new DataInputStream(socket.getInputStream())
的方法。 (我并没有声称 是这样实现的:我们只是在考虑。)没有什么可以实现的,你可以用流来比较它与==
,告诉你是否这是一个新的流,每次像那样或总是相同的流。你读出的内容不受影响。