即使在第一次读取操作之前,BufferedInputStream是否会立即填充缓冲区?

时间:2015-09-21 15:41:59

标签: bufferedinputstream

我不确定这个问题的答案是什么:

如果我将一个BufferedInputStream包装在一个来自例如http调用的InputStream周围 - 自动执行BufferedInputStream并立即使用InputStream中的数据填充缓冲区(在“wrap”-time?),或者我是否必须调用首先在BufferedInputStream上读取(),然后缓冲区被填满?简而言之:缓冲区何时首次填充?

我在问,因为如果我有一个http电话,我希望能够快速将小文本文件的内容存储在RAM中(它们更安全),而不是依赖于连接,实际读取时仍然是开始...

如果基础TCP连接关闭,我是否会使用BufferedInputStream获得IOException,即使缓冲区设法填满了实际请求的所有数据?

2 个答案:

答案 0 :(得分:1)

创建BufferedInputStream时,会创建一个内部缓冲区数组。当读取或跳过来自流的字节时,内部缓冲区根据需要从包含的输入流中重新填充,一次多个字节。在你read之前,它应该是空的。

答案 1 :(得分:0)

Fill方法仅在第一个readskip方法调用中被调用。

从BufferInputStream中提取代码。

public synchronized int read() throws IOException {
    if (pos >= count) {
        fill();
        if (pos >= count)
            return -1;
    }
    return getBufIfOpen()[pos++] & 0xff;
}

Skipfill操作也有类似的检查。