2016-06-12 6 views
1

Очень часто, чтобы получить InputStream из URLConnection так:Получает ли URL-адрес getInputStream() возвращающий один и тот же InputStream каждый раз?

InputStream stream = connection.getInputStream(); 

, где соединение представляет собой URLConnection.

https://developer.android.com/reference/java/net/URLConnection.html#getInputStream()

У меня есть ситуации, в которой я хотел бы повторно использовать поток. У меня есть доступ к объекту соединения, и теперь мой вопрос заключается в том, что один экземпляр URLConnection возвращает «тот же» InputStream каждый раз? То есть, если я снова вызову connection.getInputStream() (но для того же объекта соединения), буду ли я получать новый поток?

ответ

1

В целом, ответ на этот вопрос («Does X do Y?»): Есть ли документация X is Y? Если да, да (или он сломан); если нет, то у вас нет гарантии, так что и не должно допускать.

Итак, давайте посмотрим на URLConnection#getInputStream's documentation:

Возвращает входной поток, который считывает из этого открытого соединения. Исключение SocketTimeoutException может быть выбрано при чтении из возвращаемого входного потока, если истечет время ожидания чтения до того, как данные будут доступны для чтения.

Возвращает:

входной поток, который читает из этого открытого соединения.

Таким образом, вы не можете полагаться на это делать так, потому что он не обещает. (Я также посмотрел в другом месте в JavaDoc для URLConnection.)

(Мои тесты вне Android предполагают, что HttpURLConnection делает по крайней мере иногда, хотя.)

0

URLConnection является интерфейсом, и все это зависит от реализаторов, если getInputStream возвращает новый поток или нет.

Лучший способ проверить это ...

URLConnection con = new URL(MY_URL_STRING).openConnection() ; 
InputStream in1 = con.getInputStream(); 
InputStream in2 = con.getInputStream(); 
boolean streamEquals = in1.equals(in2); 
0

Это не имеет значения. Это не имело бы никакого значения, сделал ли это, или нет. Рассмотрим метод, который всегда возвращает new DataInputStream(socket.getInputStream()). (Я не утверждаю, что это is реализовано так: мы просто рассматриваем.) Нет ничего практичного, что вы могли бы сделать с потоком, не сравнивая его с ==, который расскажет вам, был ли он новым потоком каждый раз или всегда один и тот же поток. То, что вы читали, не затрагивается.

 Смежные вопросы

  • Нет связанных вопросов^_^