【问题标题】:Does URLConnection's getInputStream() return the same InputStream every time?URLConnection 的 getInputStream() 是否每次都返回相同的 InputStream?
【发布时间】:2016-10-12 23:08:40
【问题描述】:
【问题讨论】:
标签:
java
android
inputstream
urlconnection
【解决方案1】:
没关系。不管有没有,都没有区别。考虑一个总是返回new DataInputStream(socket.getInputStream()) 的方法。 (我并没有声称它是这样实现的:我们只是在考虑。)除了将它与== 进行比较之外,您无法对流进行任何实际操作,这会告诉您它是否是每次这样的新流或总是相同的流。您从中读出的内容不受影响。
【解决方案2】:
URLConnection 是一个接口,如果getInputStream 返回一个新流,这完全取决于实现者。
验证这一点的最佳方法是......
URLConnection con = new URL(MY_URL_STRING).openConnection() ;
InputStream in1 = con.getInputStream();
InputStream in2 = con.getInputStream();
boolean streamEquals = in1.equals(in2);
【解决方案3】:
一般来说,这类问题(“X 做 Y 吗?”)的答案是:文档说 X 做 Y 吗?如果是这样,是的(或者它坏了);如果不是,您无法保证,并且必须假设不会。
那么让我们看看URLConnection#getInputStream's documentation:
返回一个从这个打开的连接中读取的输入流。如果在数据可供读取之前读取超时过期,则从返回的输入流读取时可能会引发 SocketTimeoutException。
返回:
从此打开的连接中读取的输入流。
所以你不能依赖这样做,因为它不承诺。 (我还在 JavaDoc 的其他地方查找了URLConnection。)
(不过,我在 Android 之外的测试表明 HttpURLConnection 至少有时会这样做。)