1. 网络字节序我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分。网络数据流同样有大端小端之分,那么如何定义网络数据流的地址呢?发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存,因此,网络数据流的地址应这样规定:先发出的数据
1. selectselect能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开 的文件描述符个数并不能改变select监听文件个数解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用 的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力#include <sys/select.h>/* Acc
1. TCP通信下图是基于TCP协议的客户端/服务器程序的一般流程:服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于 监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服 务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK 段,服务器收到后从ac
1. socket#include <sys/types.h> /* See NOTES */ #include <sys/socket.h>int socket(int domain, int type, int protocol);domain:AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用IPv4的地址AF_INET6 与上面类似
![公众号封面](/Users/shenjunwei/Documents/Doc/vegetable/source/_note/编程语言/写给Android开发的C++教程/_v_images/Android C++系列:JNI中的handle ALooper/公众号封面.png)1. Android Handler回顾在Android中,UI线程是一个很重要的概念。我们在日常开发中对UI的更新和
Java中创建线程三种方式:继承Thread类创建线程类;通过Runnable接口创建线程类;通过Callable和Future创建线程。Native 中支持的线程标准是 POSIX 线程,它定义了一套创建和操作线程的 API 。我们可以在 Native 代码中使用 POSIX 线程,就相当于使用一个库一样,首先需要包含这个库的头文件:#include <pthread.h>这个头文件
在 Native 代码中有时候会接收 Java 传入的引用类型参数,有时候也会通过 NewObject 方法来创建一个 Java 的引用类型变量。在编写 Native 代码时,要注意这个代表 Java 数据结构类型的引用在使用时会被 GC 回收的可能性。我们知道,在Java中提供了四个级别的引用:强引用,软引用,弱引用和虚引用:强应用:Java中默认声明的就是强引用,比如:Object ob
Android JNI 调用时的异常主要有如下两种:Native 代码调用 Java 层代码时发生了异常要处理Native 代码自己抛出了一个异常让 Java 层去处理 可以看到异常的发生和处理基本都需要 Native 和 Java 交互,而对于 Native 自身出了异常,也就是 C/C++ 代码有问题,导致应用崩溃的又是另一回事了。Native 调用 Java 方法时的异常之前讲述了如何从 N
Android JNI开发时经常遇到C/C++层访问Java层对象的,比如C/C++层创建一个String返回,或者访问Java层提供的MediaCodec等,此时我们就需要通过 JNI 来调用 Java 一个类的构造方法来创建这个 Java 类。调用构造方法构造方法是特殊的类方法,但是调用构造方法和之前调用类的实例方法步骤类似,也需要获得对应的类的jclass和方法 id。对于类,通过 Fin
Java操作BitmapBitmap代表一个位图,BitmapDrawable*里封装的图片就是一个 Bitmap对象。开发者为了把一个 Bitmap对象包装成 BitmapDrawable 对象,可以调用 BitmapDrawable的构造器:BitmapDrawable bitmapDrawable = new BitmapDrawable(bitmap);如果需要获取 BitmapDraw
在 JNI 去调用 Java 的方法和访问字段时,最先要做的操作就是获得对应的类以及对应的方法 id。通常我们通过 FindClass 、GetFieldID、GetMethodID 去找到对应的信息也是耗时操作,如果方法被频繁调用(特别是像音视频处理时循环的调用JNI方法传递音视频数据),每次都去查找对应的类和方法ID会很耗性能,所以我们必须将它们缓存起来,达到只创建一次,后面直接使用缓存内容的
1. 什么是JNIJNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。JNI不仅仅是Android特有的,它是属于Java平台的,它允许在Java虚拟机内运行的java代码与其他编程语言(如c, c++和汇编语言)编写的程序和库进行交互。Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言
Java 层Assetsassets目录是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。 Android还存在一种放置在res下的raw目录,该目录与assets目录不同。 区别点:assets目录不会被映射到R中,因此,资源无法通过R.id方式获取,必须要通过AssetManager进行操作与获取;res/raw目录下的资源会被
【Android 构建新工具】Bazel 构建Android项目本文我们使用Bazel构建一个最简单的Android项目。Bazel提供了编译Android程序内置的方法,具体参考:Android Rules1. 环境准备Bazel只是编译工具,不是真正的编译器,所以还是需要Andorid开发的SD、NDK以及Android Studio,并配置开发环境。接下来就是安装Bazel。由于平时
Bazel与Gradle工具差异之前介绍Bazel文章中有同学闻到Bazel与Gradle工具的差异。这篇文章我们解答这个问题。来自Bazel员工的说法Bazel和Gradle强调构建体验的不同方面。在某种程度上,它们的侧重点是互斥的——Gradle对灵活性和非突出性的要求对它的构建结构进行了限制,而Bazel对可靠性和性能的要求产生了强制不可协商的限制。Gradle重视的原则和Bazel是一样
编译器及编译工具之编译工具上篇介绍了编译器,如果直接使用编译器管理我们的大中型项目,会相当痛苦而且根本无法维护。为了提效,于是产生了各种编译工具。所以今天介绍移动端开发对应的的编译工具。Apache Ant还记得那个用eclipse开发Android的年代吗?eclipse就是基于Ant工具来构建Android项目的。Apache Ant 是由 Java 语言开发的工具,由 Apache 软件基金
写给Android开发者的芯片知识作为 Android 开发者,免不了要处理 arm、armv7a、armv8a、x86 等架构适配,加上今年各个行业都遇到了“缺芯”的困扰,以及美国对华为的芯片制裁,制裁的是什么技术?本文尝试讲清楚下面几个问题: Android动态库适配到底在适配什么?1. Android动态库适配到底在适配什么?2. CPU、架构、指令集、芯片之间的关系和联系;3. arm
Android编译器及编译工具之编译器习惯了IDE以及各种现成的编译工具为我们提供便捷的编译方式,我们很少会操心编译工具的编译过程和原理,但是工具越高级,隐藏的细节就越多,这样编译遇到问题时我们难以定位,遇到复杂的项目(尤其跨平台项目难以用ide)时不知如何下手。所以准备写两篇关于编译器和编译工具的文章。本文先来介绍编译工具。主要从事Android开发,本文主要介绍Android、iOS用到的编程
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号