黑马程序员技术交流社区
标题:
关于java IO问题
[打印本页]
作者:
王贺
时间:
2013-11-26 21:56
标题:
关于java IO问题
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStream input = System.in;
System.out.println(input);
}
今天测试了一下System.in的输出
输出结果是
java.io.BufferedInputStream@c17164
问一下是怎么初始化这个input的,为什么是输出上面的结果?
作者:
陪你等日出
时间:
2013-11-26 22:09
你这样写就等于是直接打印了input这个对象了,哥们是想将键盘输入的数据打印在控制台上吗?那应该用IO流的read()方法读取的,
import java.io.*;
class Demo
{
public static void main(String[] args) throws IOException
{
InputStream input = System.in;
byte[] buf = new byte[1024];
int len = input.read(buf);
//打印键盘录入的数据到控制台
System.out.println(new String(buf,0,len));
input.close();
}
}
复制代码
作者:
樊志伟
时间:
2013-11-26 22:43
同求,技术大牛们,来看看啊
作者:
樊志伟
时间:
2013-11-27 01:42
哥们,你这个问题得去追究源码了。
System.in是一个static的InputStream类对象。源码中是这么写的
public final static InputStream in = null;
public static void setIn(InputStream in) {
checkIO();
setIn0(in);
}
setIn0(new BufferedInputStream(fdIn));
复制代码
所以实际上,in的是一个BufferedInputStream对象,最后通过println打印的时候会调用如下的方法
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
复制代码
所以,到最后会打印出“类名@哈希值”的这种形式。
明白了么?
作者:
樊志伟
时间:
2013-11-27 10:31
版主~~~求加分~~~{:soso_e106:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2