mark(int readlimit)
在此输入流中标记当前的位置。
reset()
将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。
也就是说mark是标记一个光标记录点功能,而reset是回到光标记录点
然后我去查看了mark的说明
参数readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。
也就是说:如果我读取了一段字节超过了readlimit 的长度,则会让mark标记失效
然后我去看了reset的说明:
- 如果创建流以后未调用方法 mark,或最后调用 mark 以后从该流读取的字节数大于最后调用 mark 时的参数(也就是超过长度mark失效),则可能抛出 IOException。
意思是超过长度会抛出个异常
然后我做了一段代码(因为昨天晚上1点临时设计的,迷迷糊糊也不想仔细命名写注释了,格式有点乱)
以下为部分关键代码:
public void read() throws Exception
{
FileInputStream fis_ReadStream1 = new FileInputStream("D:\\JPG\\combine.txt");
BufferedInputStream bis_buff1 = new BufferedInputStream(fis_ReadStream1, 1000);
int i_read = 0;
while ( (i_read = bis_buff1.read()) != -1 )
{
if(i_read == 'a')
{
bis_buff1.mark(1); /*此处长度为1*/
//关键步骤,还原读取
byte bx[] = new byte[6]; /*我读取了6个,超长*/
bis_buff1.read(bx, 0, 6);
bis_buff1.reset(); /*reset没有出现异常????*/
System.out.println(new String(bx));
break;
}
}
bos_buff.flush();
BufferedInputStream.close()
fis_ReadStream1 .close();
} |