Java IO阅读器-它们是如何工作的?

Java IO阅读器-它们是如何工作的?,java,io,connection,inputstream,bufferedreader,Java,Io,Connection,Inputstream,Bufferedreader,我正在进行一个项目,需要从服务器读取几个文件。 我想知道是否可以读取输出并连接到具有相同实例的其他地方。 显然我能看到下面 已尝试此伪代码: c.connect(google) BufferedReader r1 = ... c.getInputStream(); c.connect(somewhereelse) BufferedReader r2 = ... c.getInputStream(); print(r1) print(r2) 输出是正确的 我不知道IO streams是如何工作

我正在进行一个项目,需要从服务器读取几个文件。 我想知道是否可以读取输出并连接到具有相同实例的其他地方。 显然我能看到下面

已尝试此伪代码:

c.connect(google)
BufferedReader r1 = ... c.getInputStream();

c.connect(somewhereelse)
BufferedReader r2 = ... c.getInputStream();
print(r1)
print(r2)
输出是正确的

我不知道IO streams是如何工作的,或者这个conn函数返回什么,我将在冬季晚上检查:-

真正的问题:我能相信我总能得到正确的数据吗?
i、 e.缓冲读取器是否保留了一些对不再绑定到连接本身的数据对象的引用?

不,我认为您不能信任此代码。InputStream需要连接才能获取数据。 例如,如果您打开java.net.SocketInputStream url连接使用此流并查看读取方法,您将看到以下代码:

    // 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链接到另一个连接并没有关闭上一个连接。 第二个猜测是您的数据被缓冲了。通过连接或缓冲区读取器。
我的想法可能是错的,但乍一看似乎是真的。

试试看,看看会发生什么@就像我说的:我做了,但我不确定它是否是100%,也许在某些情况下它可能会改变,我将不得不重写一半的应用程序是的,尝试&失败是学习的一种方式,但是……你是什么意思;哪个数据对象?从连接中获取的InputStream只是从该连接中读取并保持与该连接的绑定。环绕InputStream的读取器仍然绑定到InputStream。@ErwinBolwidt那么此代码不应该工作,但它确实工作。如果这将是肯定的,这将是很好的为我没有必要创建新的连接。我没有足够的技能来检查这是如何工作的:-哪些代码不应该工作?您尚未发布任何可能工作的代码。而且您也没有阐明数据对象的含义。