首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java中IO流有关问题-System.in

2013-09-29 
Java中IO流问题--System.inSystem.in 是返回一个InputSteam,这个InputStream中有个read()方法,可以读字节。

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;
    }

热点排行