PipedInputStream.read() returns -1



如果我没有关闭任何流,PipedInputStream.read()如何返回 -1? closedByReader为假,closedByWriter为假,connected为真,但它返回 -1;为什么它认为我完成了?read()应该返回负数的条件是什么?

编辑 1

这是库函数的代码

public synchronized int read(byte b[], int off, int len)  throws IOException {
if (b == null) {
    throw new NullPointerException();
} else if (off < 0 || len < 0 || len > b.length - off) {
    throw new IndexOutOfBoundsException();
} else if (len == 0) {
    return 0;
}
    /* possibly wait on the first character */
int c = read();
if (c < 0) {
    return -1;
}
b[off] = (byte) c;
int rlen = 1;
while ((in >= 0) && (len > 1)) {
    int available; 
    if (in > out) {
    available = Math.min((buffer.length - out), (in - out));
    } else {
    available = buffer.length - out;
    }
    // A byte is read beforehand outside the loop
    if (available > (len - 1)) {
    available = len - 1;
    }
    System.arraycopy(buffer, out, b, off + rlen, available);
    out += available;
    rlen += available; 
    len -= available;
    if (out >= buffer.length) {
    out = 0;
    }
    if (in == out) {
            /* now empty */
    in = -1;
    }
}
return rlen;
}

我还无法跟踪变量值,但我可以看到它在 Eclipse 调试器中如何从一行跳到另一行。所以我看到它在最后一行退出。仅执行一个while循环。由于我们之前已经rlen=1过,因此它可以改变的唯一原因是rlen += available行。此变量应等于 -2 。我看到它最后访问available = len - 1行。所以,len应该-1,但通过2048...

编辑 2

当然,错误是我的,绝对在另一个地方。实际上,PipedInputStream被包装成AudioInputStream被错误地配置为固定大小。达到大小会导致流结束情况。

好吧,如果InputStream正在读取的下一个字节是-1,则InputStream必须返回-1。如果您的流没有关闭,则连接为真,我认为这只是您看到的数据

相关内容

  • 没有找到相关文章

最新更新