日期:2014-05-20  浏览次数:20868 次

关于Readable的read方法
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());
  }
}



------解决方案--------------------
我的理解是:

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外的正数,不管返回的是什么正数,结果都一样!