最近、ユーザー定義クラスをスキャナーへの入力として渡すことについての本を読みましたが、その背後にあるロジックについてはあまり説明されていませんでした。ここにプログラムがあります
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;
class ScannerInputBase implements Readable
{
private int count;
Random rand = new Random();
ScannerInputBase(int count) { this.count = count; }
public int read(CharBuffer cb) //read is a method in Readable interface
{
if(count-- == 0)
return -1;
for(int i=0;i<2;i++)
{ cb.append('a'); }
return 1;
}
}
public class ScannerInput {
public static void main (String args[]) {
Scanner input = new Scanner(new ScannerInputBase(5));
while(input.hasNext())
{
print(input.next()+"-");
}
}
}
そしてその出力は
aaaaaaaaaa-
ここで2つの質問があります
ここで read() 関数がどのように呼び出されるのですか?
つまり、どういうわけか暗黙のうちに呼び出されていることを理解していますが、どこから呼び出されているのかを理解しています。出力内の 1 つのハイフンは、main 関数の while ループが 1 回だけ繰り返されることを示しています。しかし、なぜ一度だけ。aa-aa-aa-aa-aa- のような出力を期待していました