Java中IO流问题--System.in
System.in 是返回一个InputSteam,这个InputStream中有个read()方法,可以读字节。
但我查了API和源码,read()是一个抽象方法啊,为什么还是能用呢?是什么去实现了?
那段源码也是完全没看懂,怎么是返回一个nullInputStream()的返回值是Null啊。
PS:还有个小问题
是不是System.in会自动捕捉\r\n回车换行符?当有这个符号时,就认为用户输入完毕?
大神快点来!!!可惜木有@功能。
源码 java io流
[解决办法]
如果一个类,以一抽象类作为参数,应该需要实现这个抽象类中的方法。
所以System类中的in方法中的read()方法,可能在某个看不到的角落里实现了。
public abstract class DemoAClass {
int i;
public abstract void read();
}public class DemoClassI {
DemoAClass a;
public DemoClassI()
{
this.a = new DemoAClass()
{
public void read()
{
i=100000;
}
};
}
}就像上面这两个类一样。这个read() 在这个类中就有了自己的功能。
是不是System.in会自动捕捉\r\n回车换行符?当有这个符号时,就认为用户输入完毕?
这个应该也属于系统属性吧。在控制台不断的输入字符,敲一下回车,就会将把信息送入到in的read方法中。
。。。。
。。
说下自己的想法,非解答。
[解决办法]
可以举个例子
FilterInputStream继承了InputStream复写了read()方法
public int read() throws IOException {
return in.read();
}这里in还是InputStram的引用
BufferedInputStream继承了FilterInputStream复写了FilterInputStream的read方法
public synchronized int read() throws IOException {
if (pos >= count) {
fill();
if (pos >= count)
return -1;
}
return getBufIfOpen()[pos++] & 0xff;
}