关于InputStream.mark()问题

 关于InputStream.mark()问题
InputStream - mark/reset 操作不是每個 input stream 都有支援,我想你明白這一點,所以選了

java.io.BufferedInputStream 來作測試。

BufferedInputStream 顧名思義就是有 buffering 機制的 input stream。它內部使用的 buffer size 可以在

建構 BufferedInputStream 時指定,預設值是 8k。

BufferedInputStream 內部因為有使用 buffer 來 preload data,直覺上這個 buffer 的 size 影響

mark/reset 所能支援的 marklimit。從你測試的結果來看,像是只要從 mark position 後所 consumed data

size 不大於 BufferedInputStream buffer size 的情況下,都能夠正確 reset(對於 InputStream - mark 原始

contract 來說是 overqualified),等於是充分利用內部的 buffer。

不過稍微看一下 sun 提供的 BufferedInputStream source code,BufferedInputStream 有 markpos,

marklimit 等 field,以此來推論應該是 honor mark/reset 機制,至於為什麼會有 overqualified 表現,要仔

細 trace 原始碼。(這種 consume 超過 marklimit 量的 data 後還能正確 reset 回 mark position,我個人是

不認為違反 mark/reset contract,所以我用 overqualified 來形容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值