从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调用流程基本上和上面的一样.
更具体的,直接看源码去.
- 从java到C层的调用(以FileInputSteam为例来说明)
- 以backlight为例说明hal层调用
- 以PMAC为例说明动态库的调用方法
- 【C语言】【unix c】信号从产生到处理的全过程(以2号信号为例)
- c/c++ native 层 通过 JNI API 调用 java 层 的AudioTrack 来播放 音频文件
- 以Gmail为例来说明如何使用Codeigniter的SMTP类发mail
- JNI NDK (1)---JNI NDK 的简单说明及从Java层中访问C/C++层
- 从边界防御到以数据为中心的安全
- Node.js挖掘之二"以http server为例浅析Node.js从前端到libuv调用过程"
- 从java层调用native层的函数,在ida中看伪C代码更直观的方法
- android 从java到C层文件读取流程
- 从以主机为中心到以内容为中心
- Android java层和C层的相互调用
- Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)
- 函数调用是如何在系统中实现的-以C为例
- python脚本调用c/c++库,以opencv的python接口为例
- 从frameworks的Java层调用JNI的方法
- printf 从用户层到OS层之间的调用关系
- mysql命令集锦
- STL常见用法整理_multiset
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作--解决方法
- was unable to start within 45 seconds. If the server requires more time, try increasing the timeout
- 我是saynani
- 从java到C层的调用(以FileInputSteam为例来说明)
- windows 7系统上安装完oracle11g数据库,无法通过远程计算机访问
- oracle表碎片起因及解决办法
- JAVA并发多线程的面试问题及答案(基础部分)
- Linux scp 使用详解
- VS2012 在创建C#类时添加文件描述
- AOI( Area Of Interest )
- static控件动态透明显示的完美解决方案
- 浏览器兼容性