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调用流程基本上和上面的一样.
更具体的,直接看源码去.
本文详细解析了Java应用程序中FileInputStream类的read方法调用流程,从Java层到JNI层再到C层,最终到达操作系统层面。
1277

被折叠的 条评论
为什么被折叠?



