A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-6 07:24  /  1167 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邱成 于 2012-9-6 09:02 编辑

package com.yn.test;

import java.io.*;

import java.io.BufferedInputStream;
import java.io.IOException;

public class TestIo {

/**
  * @param args
  */
public static void main(String[] args) {
  try{
   FileInputStream fis =
    new FileInputStream("d:\\123\\TestIo.java");
   BufferedInputStream bis =
    new BufferedInputStream(fis);
   int c = 0;
   System.out.println(bis.read());
   System.out.println(bis.read());
   bis.mark(100);
   for(int i=0; i<=10 && (c=bis.read())!=-1; i++) {
    System.out.print((char)c + " ");
   }
   System.out.println();
   bis.reset();
   for(int i=0; i<=10 && (c=bis.read())!=-1; i++) {
    System.out.print((char)c + " ");
   }
   bis.close();
  }catch (IOException e) {
   e.printStackTrace();
  }

}

}

输出结果:
112
97
c k a g e   c o m . y
c k a g e   c o m . y
为什么我的b.mark(100);没起作用???
就算改成其他数值也是一样的输出,根本没有定位到第100个字符并从100个字符开始输出呀?根本就是从第一个字符开始的,为什么???

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
查看API文档:
void java.io.BufferedInputStream.mark(int readlimit)
    See the general contract of the mark method of InputStream.
     Overrides: mark(...) in FilterInputStream
      Parameters:
      readlimit the maximum limit of bytes that can be read before the mark position becomes invalid.
标记当前位置,在mark以后最多可以读取readlimit字节数据,如果mark后读取超过readlimit字节数据,marik就会失效
参考他人解释:BufferedInputStream类调用mark(int readlimit)方法后读取多少字节标记才失效,是由readlimit和BufferedInputStream类的缓冲区大小两者中的最大值决定,而并非完全由readlimit确定
回复 使用道具 举报
mark(int readlimit) 方法的作用是标记当前指针位置,readlimit - 在标记位置失效前可以读取字节的最大限制。
当你读取两个字节之后,这个时候指针应该指向第三个字节,所以还是从应该是从第三个字节开始读取10个字节,然后调用reset()之后,指针又回到刚才标记的位置,还是从第三个字节开始读取10个字节。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马