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

android 底层代码libcore android 底层代码libcore部分 立即下载

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调用流程基本上和上面的一样.

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

信息安全与技术——(十一)恶意代码检测与防范技术 恶意代码(Malicious Code )或恶意软件(Malware )主要是指以危害信息的安全等不良意图为目的的程序,它们一般潜伏在受害计算机系统中实施破坏或窃取信息。 阅读详情

相关推荐

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4604

Android下的文件读写

1. 分析 Java中常用的文件读写的两个类:   1.FileInputStream/FileOutputStream(FileReader/FileWriter)   2.RandomFileAccess   FileInputSteam和FileOutputStream继承于InputStream和OutputStream,FileReader、FileWriter继承于R

yf0994的专栏 1045

用C#完成最小二乘法拟合平面方程,再计算点到面的距离

【代码】用C#完成最小二乘法拟合平面方程,再计算点到面的距离。

MechMaster 647

java tcp底层源码分析

TCP服务端实现        //定义服务器端socket并指定监听端口     ServerSocket serverSocket = new ServerSocket(5937);     //调用阻塞式方法来获取客户端连接的socket     Socket socket = serverSocket.accept();      //获取客户端socket的输入流    

xuqiqiang1993的博客 3059

AI Agent核心架构解析:从Tool、Skill到MCP协议的智能体构建实战

在人工智能领域,大语言模型(LLM)赋予了AI自主规划与决策的能力,推动了智能体(Agent)技术的演进。其核心原理在于构建一个具备感知、规划、行动与反思能力的自主系统。这一架构的技术价值在于将AI从被动应答升级为主动执行复杂任务的工作伙伴,显著提升了自动化水平与问题解决效率。应用场景广泛覆盖了市场分析、自动化办公、智能客服与垂直领域集成等。本文聚焦于实现这一能力的关键组件:基础工具(Tool)、组合技能(Skill)与标准化协议(MCP)。其中,Skill通过封装多个Tool形成可复用的高级能力,而MCP

chuannaoxuan4674的博客 321

手把手教你用Kali+字典爆破WiFi密码:从抓包到破解的完整流程

本文提供了一份详尽的无线网络渗透测试实战指南,重点讲解如何使用Kali Linux和Aircrack-ng套件进行WiFi安全评估。内容涵盖从硬件选型(如RTL8812AU网卡)、驱动配置、监听模式设置,到使用airodump-ng扫描抓包、捕获WPA握手包,以及利用字典进行离线破解的完整流程。同时强调了在授权环境下进行安全测试的重要性,并给出了相应的网络加固建议。

weixin_28568819的博客 1675

Android 10、11 存储完全适配

比如自己做的相册管理器,先遍历相册拿到图片/视频的路径,然后再解析成Bitmap展示,现在需要先拿到Uri,再解析成Bitmap,多少有些不方便。2、SAF虽然能够访问其它目录的文件,但是每次都需要跳转到新的页面去选择,当想要批量展示文件的时候,比如自己做的文件管理器,就需要列出当前目录下有哪些目录/文件,这个时候需要有权限遍历/sdcard/目录。系统里有external.db数据库,该数据库里有files表,该表里存放着共享文件的诸多信息,如图片有宽高,经纬度、存放路径等,视频宽高、时长、存放路径等。

Project_HW的博客 1378

[自动化工具] 解放双手的利器:「自动邮件平台」工具助你高效搞定重复通知任务

摘要:自动邮件平台是一款零门槛自动化工具,帮助用户高效处理重复性邮件任务。该平台支持两种调度模式(指定日期和间隔天数),无需编码即可快速设置账单提醒、活动通知等任务。提供免费托管版(小时级调度)和自主部署版(分钟级调度),满足不同精度需求。典型应用场景包括客户跟进、系统监控等周期性任务。用户只需三步即可完成设置,还能扩展定制化功能。该工具让非技术人员也能轻松实现邮件自动化,释放时间专注更重要的工作。

每日出拳老爷子的博客 108

通过文件描述符(fd)去访问Android共享内存

关于Android共享内存,可以查看下这个资料 https://blog.csdn.net/goodlixueyong/article/details/53151959 Android中分别提供了C++和Java的访问共享内存的接口 Java层使用MemoryFile 通过fd去标识共享内存 android_os_SharedMemory.cpp里有具体实现 Nati...

aaajj的专栏 2126

GRCNN抓取网络学习2【自制Jacquard数据集训练】

请先完成【机械臂视觉抓取从理论到实战】,这样有利于下面操作的理解!然后第二步是GRCNN抓取网络1【Jacquard数据集等效抓取集制作】,有了自己的数据集输入到GRCNN中是三种文件,接下来就是准备训练GRCNN网络啦!grasps.txtRGB.png本文帮大家根据自制Jacquard数据集训练GRCNN抓取网络,其中包含数据格式的对齐,列举了常见的几种训练方法,相信能坚持到这里的都应该试试顺利了吧!接下来会针对GRCNN调优,期待一下下吧,那就别宁色你的三连。

vor234的博客 2796

基于STM32+华为云设计的智能鱼缸

本项目基于STM32单片机设计一款基于物联网的智能鱼缸系统,并通过应用侧接口开发上位机APP实现远程对鱼缸参数的检测和控制。该系统包括水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能,可以帮助用户更好地管理鱼缸,提高鱼儿的生存率,同时增强用户对家庭装饰品的掌控感和科技感。

1万+

libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)

12-12 02:16:31.004: W/System.err(10219): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) 12-12 02:16:31.044: W/System.err(10219): at libcore.io.IoBridge.maybeThrowAft

_______攻城无数_____、、、、、、 1万+

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 967

FileInputSteam

字符流:处理字符相关,如处理⽂本数据(如txt⽂件), Reader/Writer 字节流: 处理字节相关,如声⾳或者图⽚等⼆进制,InputStream/OutputStream 区别: 1.字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,⼀次可能读多个字节 2.字节流可以处理⼏乎所有⽂件,字符流只能处理字符类型的数据 形成的四个抽象类 字符流 Reader/Writer 字节流 InputStream/OutputStream InputStream是输⼊字节流的⽗类,它是⼀个抽

m0_51351504的博客 191

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

day35 java 文件的复制 移动 FileInputSteam FileOutputSteam 最简单

今天讲实际一点的操作。文件的拷贝复制移动 在这里插入代码片 package com.bjpowernode.javase.day35.homework; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOEx...

weixin_43856128的博客 300

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java 对象序列化与反序列化 FileInputSteam.readObject,writeObject

T t=new T(); t.k=8; FileOutputStream fos=new FileOutputStream("d:/a.dat"); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(t); ...

weixin_34351321的博客 236

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java中FileInputStream,FileReader等的区别

FileInputStream,FileReader C语言只需要一个File*就可以了,与C不同,java有一系列流类型,其数量超过60种。类库的设计者声称:“有足够的理由为用户提供丰富的流类型的选择:这样做可以减少程序的错误。”例如,在C语言种,许多人认为“将输出流写入一个只读模式的文件”是很常见的错误。(事实上,这并不常见。) 我们认为在C++语言中,流接口设计者避免程序出错

zll0927的专栏 642

IO流基础

填空题 根据流的方向,流可以分为两类:输入流和输出流。 根据操作对象的类型,可以将数据流分为字节流和字符流两种。 在java.io包中有4个基本类:InputStream、OutStream、Reader和Writer类。 选择题 Java语言提供处理不同类型流的类所在的包是(D) A.java.sql B.java.util C.java.math D...

pigziprogrammer的专栏 383

java File,FileInputStream和FileOutputStream的测试

【代码】java io。

xxdysqwow的博客 200

RandomAcessFile的使用

今天在网上搜了下java.io.RandomAcessFile的使用方法,收益良多。下面将搜到的几个例子放进来,希望与大家分享,顺便加深一下记忆。 1.java.io.RandomAcessFile的简单使用,见代码 import java.io.*; public class IOStreamDemo {  public static void main(String[] args) {

822

字节流 fileinputstream

3.以字节为单位的输入输出流 输入流:InputStream(读) ----> FileInputStream 把文件作为字节流进行读操作 ----> BufferedInputStream(缓冲区的,先读入缓冲区) ----> PipedInpu...

weixin_30252155的博客 64

Java层文件系统监控简单实现

Java层文件系统监控简单实现 在阅读android 10的aosp源码 framework/base/core/java/android/app/ActivityThread.java时候,看到了AndroidOs这个新东西,发现是一个IO回调,挺有意思 aosp/libcore回调机制 比如File.delete函数 public boolean delete() { SecurityManager security = System.getSecurityManager();

lzz137的博客 587

Android (DiskLruCache)硬盘缓存代码实现

参考文章:http://blog.csdn.net/guolin_blog/article/details/28863651 1.新建一个libcore.io包; 2.在新建的libcore.io包下新建一个类(也可以从网上下载):DiskLruCache.java /* * Copyright (C) 2011 The Android Open Source Project * *

tanghua0809的专栏 543

11 | I/O优化(下):如何监控线上I/O操作?

今天我们学习了如何在应用层面监控 I/O 的使用情况,从实现上尝试了 Java Hook 和 Native Hook 两种方案,最终考虑到性能和兼容性,选择了 Native Hook 方案。对于 Hook 方案的选择,在同等条件下我会优先选择 Java Hook 方案。但无论采用哪种 Hook 方案,我们都需要耐心地查看源码、分析调用流程,从而寻找可以利用的地方。

qq_37756660的博客 1062

Android7 so库加载流程梳理

Java层通过System.load或System.loadLibrary来加载一个so文件,它的定义在Android源码中的路径为libcore/ojluni/src/main/java/java/lang/System.java,执行流程如下: 接下来,让我们具体看下System.loadLibrary这个方法的实现。 /** * Loads the system library specified by the <code>libname</code&g

ngRoom 2009

Java socket深层次通信_Socket详解

前面两篇分析了TCP和UDP协议,本篇来分析一下Socket,有了前面的基础,对理解Socket有很大的帮助,同时也是对TCP和UDP的更深层次的了解,经过多天的资料研究和代码分析,对socket也算是有了一个清楚的认识,鉴于网上的知识比较散,所以想把关于socket的知识整理一下,希望能够帮助想理解socket的童鞋,本着这些目的,本篇就来仔细分析一下Socket的原理。文章内容有点长,先罗列一...

weixin_39996134的博客 531
上一篇: 网络切换命令netsh interface
下一篇: Linux 下zip包的压缩与解压
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值