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