我正在处理需要从服务器读取多个文件的项目。 我想知道我是否可以读取输出并使用相同的实例连接到其他地方。 显然我可以(见下文)。
试过这个伪代码:
c.connect(google)
BufferedReader r1 = ... c.getInputStream();
c.connect(somewhereelse)
BufferedReader r2 = ... c.getInputStream();
print(r1)
print(r2)
输出正确。
我不知道IO流是如何工作的,或者这个conn函数返回的是什么(我将在冬季晚上检查: - )
真实问题:我可以依赖这样一个事实:我会一直得到正确的数据吗? 即,缓冲读取器是否保留对不再与连接本身绑定的数据对象的引用?
答案 0 :(得分:0)
不,我认为你不能相信这段代码。 InputStream需要连接来获取数据。
例如,如果您打开java.net.SocketInputStream
(网址连接使用此流)并查看read
方法,您会看到以下代码:
// connection reset
if (impl.isConnectionReset()) {
throw new SocketException("Connection reset");
}
你可以看到,如果存在,该流会尝试获取缓冲数据:
/*
* We receive a "connection reset" but there may be bytes still
* buffered on the socket
*/
if (gotReset) {...}
和lower正在检查连接丢失:
/*
* If we get here we are at EOF, the socket has been closed,
* or the connection has been reset.
*/
if (impl.isClosedOrPending()) {
throw new SocketException("Socket closed");
}
关于您的工作实施:
c
链接到另一个连接并未关闭之前的连接。我的想法可能是错的,但它看起来是真实的。