read()返回的是 int型,这个int表示什么?
当用Scanner.hasNext()时,是根据read的返回值来判断hasNext()的真假吗?
假如有以下程序:
import java.nio.*;
import java.util.*;public class Test implements Readable {
   private static final char[] chars =
    "abcde".toCharArray();
   private int count;
  public Test(int count) { this.count = count; }    
  public int read(CharBuffer cb) {
      if(count-- == 0)
      return -1; 
      for(int i = 0; i < 5; i++) {
         cb.append(chars[i]);
      }
      cb.append(" "); //这句有什么作用?
      return 5; //这里改成return 3或2等正数,为什么程序的输出结果都是一样的呢?
  }
  public static void main(String[] args) {
    Scanner s = new Scanner(new Test(5));
     while(s.hasNext())
      System.out.println(s.next());
  }
}

解决方案 »

  1.   

    我的理解是:read()返回的是 int型,这个int表示什么? 
       -->这个int只要不等于-1,read()就会一直被调用,直到read()抛出异常或者return -1 !当用Scanner.hasNext()时,是根据read的返回值来判断hasNext()的真假吗?
      -->这个程序中,hasNext()是根据CharBuffer中是否有字符串来判断真假的!与read()的返回值无关.cb.append(" "); //这句有什么作用? 
      --> 在默认的情况下,hasNext()是通过空白符来划分界限的,此句的作用就是,为CharBuffer中的字符串添加空白符!
    return 5; //这里改成return 3或2等正数,为什么程序的输出结果都是一样的呢? 
      -->只要返回值是除-1外的正数,不管返回的是什么正数,结果都一样!
      

  2.   

    public abstract int read()
                      throws IOException从输入流读取下一个数据字节。返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流的末尾或者抛出异常前,此方法一直阻塞。API上面都有的,看下吧
      

  3.   

    问题是:read()在Scanner中什么时候被调用?