从java到C层的调用(以FileInputSteam为例来说明)

来源:互联网 发布:python 策略回测 编辑:程序博客网 时间:2024/06/01 16:19

1.   引子:   

任何一个java开发平台, 大体上都脱离不了下面的这个架构:


上层:         java语言编写的应用程序 

中间层:    java虚拟机+ java核心库

下层:        c/c++ 以及操作系统


本文主要来说明一下java核心库在整个架构中是如何做到承上启下的(即调用流程).

用Android来说明,以常用的文件流FileInputSteam类的read函数来说明.


2.  代码调用流程:

      主要类及函数 :                                                        函数所在的文件:


java层:  FileInputSteam.read                                               java\io\InputStream.java
                  IoBridge.read                                                   libcore\io\IoBridge.java
                      Libcore.os.read                                            libcore\io\LibCore.java
                           public static Os os = new BlockGuardOs(new Posix())    libcore\io\LibCore.java             
                                 read                                                    libcore\io\Posix.java
                                 readBytes
                          private native int readBytes(FileDescriptor fd, Object buffer, int offset, int byteCount) throws ErrnoException;


JNI层:      Posix_readBytes                                              native\libcore_io_Posix.cpp
               jniGetFDFromFileDescriptor                              JNIHelp.cpp
C层:        read                                                                 libc


补充: http调用流程基本上和上面的一样.

更具体的,直接看源码去.

0 0