nullInputStream() java

来源:百度知道 编辑:UC知道 时间:2024/09/20 13:29:53
java system中使用nullInputStream()将in初始化为一个空值,然后交由initializeSystemClass()初始化in。顺带帮我分析下out。我想知道是怎么初始化的?还有就是in是怎么获得我键盘上的输入的。具体的过程是怎样的?知道的兄弟帮忙解释下?一直不明白。。还有就是标准输入输出设备怎样和程序交互的?

Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。 J

java的System.in里的in就是通过native方法和键盘进行交互的,相当于写了一个C的外挂,用C和操作系统交流,这样就能得到硬件信息了

附:jdk中部分源码
源码。

源码中有如下对 in, out 和 err 的申明:
public final static InputStream in = nullInputStream();
public final static PrintStream out = nullPrintStrea();
public final static PrintStream err = nullPrintStrea();

大约在1014 行左右可以发现对nullInputSteram和nullPrintStream的定义如下:
private static InputStream nullInputStream() throws NullPointerException {
if (currentTimeMillis() > 0)
return null