自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

翻译 JNI官方文档翻译7-Java线程和Native线程

在写这篇文章之前,我还是先简单概括一下第七章的内容:对于java程序而言,native是我们需要访问的库。但是对于一个单纯的c程序而言,我们可以使用一个特殊的c库来创建虚拟机。刚好相反。在C程序里创建一个java虚拟机,然后加载类,找到类里的main方法,然后执行,这样一个虚拟机就跑起来了。事实上,我们在命令行里输入java 命令,其实就是执行类似这样的程序。而java命令是个C程序,负责创建虚拟

2016-05-27 10:25:18 4114

翻译 JNI官方文档翻译6-异常

我们之前遇到了很多调用JNI函数抛异常的情形,我们通过检查返回值NULL的情况。这一节我们介绍怎么发现异常并且从这些错误情况中恢复。我们主要关注于JNI调用产生的异常,如果JNI系统调用发生了异常,我们可以检查返回值,但是,如果我们调用java层回调函数callback,那么接下来的内容你就需要注意了,我们需要遵循以下几个步骤。      我们通过几个例子,介绍JNI处理异常的函数。

2016-05-17 09:09:30 1305

翻译 JNI官方文档翻译5-局部和全局引用

时间过得好快,一转眼写到了第五章,JNI对于许多java程序员来说一般是很陌生的,因为,要想使用JNI必须使用C,然而很多Java程序员都不会C,其实实际上不是这样的。项目中应该是分工协作才是,JNI作为一种粘合剂,将Java代码和C代码粘合在一起。作为一个java程序员,你至少应该会一点点C。      JNI暴露给程序员的并不是真正的引用,而是不透明引用,文档当中称之为opaque

2016-05-16 17:30:55 1492

翻译 JNI官方文档翻译4-属性和方法的访问

本篇文章介绍如何访问任意对象的属性和方法,当然是在native层访问,方法的访问一般作为java层的回调来访问。我们先从 属性的访问和回调函数的访问开始,接下来再讨论一下使用一种高效简单的缓存技术来提高效率。最后我们讨论native访问java层属性和方法的性能特点。属性的访问:Java语言支持两种属性,每个实例都有自己独立的属性,所有实例共享同一份静态属性。JNI提供get se

2016-05-16 15:00:07 4406

翻译 JNI官方文档翻译3-基本数据类型 字符串 数组

在使用JNI的时候,你问的最多的问题莫过于 Java的数据类型和C/C++的数据类型怎么一对一映射。在我们的HelloWord例子当中,我们并没有传入任何参数给我们的java层print方法,native方法也并没有返回任何数据而是void,本地方法只是简单的打印一个字符串,然后就返回了。实际开发中我们都需要传入参数,返回参数,本章就会讨论如何从java层向底层传数据,以及如何从底层向java层返

2016-05-16 10:41:45 3973

翻译 JNI官方文档翻译2-Getting Started

第一个Java调用C程序的HelloWord由下面几步构成:1. 创建HelloWord.java 并声明Native方法 2. 使用javac编译HelloWord源文件生成HelloWord.class 3.使用javah -jni生成C头文件HelloWord.h, 这个头文件包含本地方法的原型声明 4.编写本地方法的HelloWord.c实现,应当包含HelloWord.h 5.编译Hel

2016-05-16 09:57:02 1031

翻译 JNI官方文档翻译1-开篇

JNI :  Java Native Interface, 是Java调用C/C++的接口协议。写本系列文章的目的是让更多Java的程序员熟悉JNI,至少知道JNI怎么用。网上很多教程,无外乎一个helloword就结束了,对JNI的一些列API的使用介绍甚少,这也是大多数人停留的层次。本文试图对JNI系列文档做翻译,当然不会逐字逐句的翻译,而是经过了我的理解和消化,做出一个满足 “信“, ”达“

2016-05-16 09:43:07 1145

原创 实时流计算框架-storm-关于grouping的理解

setBolt() setNumTasks() 方法有一个参数, 可以设置运行这个bolt的Task数量---线程数量. 那么grouping就是处理spout数据源分发给这些Task的策略.这里例举3个比较常用的.fieldGrouping, spout会把tuple发送给Bolt对应的Task,但是,要按照tuple的某个field来标识Task. 这样这个Task以后就只能收到field值为A的这个tuple, 这个理解起来略困难.举个例子.需求: 按学号统计学生这个学期每次月考的各科..

2020-09-29 17:44:06 158

原创 itextpdf中文乱码问题研究

最近打算用java代码生成一个pdf,结果找到了itextpdf, 感觉还是很强大的,只是网传不支持中文。引用了itextAsia 搞了好半天中文居然乱码。网上的各种方法他能生成中文,但是我还是乱码,无奈之下研究了一下字符集,一切从Charset.defaultCharset()这个方法开始。System.out.println(Charset.defaultCharset());输出结果...

2019-09-29 15:08:35 2829

原创 mac搭建wxWidgets开发环境,使用xcode

最近一直在选择究竟使用哪种GUI开发库比较合适, 目前我正在使用JavaFX, 原因是做原型开发,JavaFX开发速度特别的快,当然我是精通Java的. 但是出于性能的考虑,我打算放弃JavaFX转向C++的跨平台GUI开发框架, 在QT和wxWidgets之间我最终选择了wxWidgets, QT虽然有开源免费版本,但是要想获得更好的服务还是要收费的,鉴于自己开发的软件将来要批量...

2019-06-30 12:22:41 1528 1

原创 MVP设计模式的优化与实践

    APP开发最让人头疼的就是业务逻辑和UI代码混合起来,造成后期APP很难维护,新需求越来越难加入,因为依赖太多了,而且纷繁复杂。后来有人提出MVP模式,既然业务逻辑要依赖UI,那么为什么不把他们之间用一个接口隔离开呢,让业务逻辑依赖UI更新的接口而不管具体的UI是如何更新的,更新UI的具体代码则交给Activity来做。当我们进行实践的时候,问题来了,我们需要定义大量接口,而且看似架构很严...

2018-07-04 12:45:47 976

原创 Linux C 整理-1

gcc的一些扩展:预定义的一些宏?__FILE__  __LINE____DATE____TIME____FUNCTION__#pragma pack(n) 字节对齐,默认4字节对齐,64位系统8字节对齐性能更高一些gcc特有__attribute__ ((属性))  修饰函数或者变量如何在main函数之前执行一个函数?void functionA(

2017-06-04 00:25:18 6193

原创 Android使用ffmpeg解码h265裸流vs使用MediaCodec解码h265裸流

突然发现自己曾经做过的东西要记录下来,这样以后就不至于找不到了,早这样该多好。今天整理了一下之前做的demo,希望对你们也有用。如果哪里移植不好。加我qq:106601549这只是个个简单的demo,要想处理好jni层的一些全局变量还需要一些功夫的,抛砖引玉,网上资料太少,自己try outAndroid使用ffmpeg解码h265第一步就是进行ffmpeg的移植,这一点有很多资料可以

2017-03-31 14:42:11 14810 4

转载 Android使用MediaCodec解码视频并用OpenGL ES进行渲染的思路

in Android 4.1 (API 16) and above, MediaCodec is introduced by Android. By using MediaCodec, we can easily decode video without using Android NDK, like creating video playback application, etc.In ga

2017-03-31 14:07:23 14927

原创 C语言的集合库C语言STL

C语言STL模板的,好吧,我承认,用集合来描述比较合适。下面是项目地址:    https://github.com/mtaxot/c-collection      java用的是集合框架,当然我这个目前还谈不上一个功能全面的C语言集合库,实现这个集合功能的想法来自Linux内核代码的list.h,当然我的实现和内核的实现还是很不一样的,我

2016-12-26 12:48:14 19887 2

原创 mp4文件格式简明教程-mp4文件格式通俗解释

一直想写一篇文章来描述一下mp4文件格式的组织情况,一开始笔者也是通过在百度搜“mp4文件格式解析” 或“mp4文件格式详解” 或者说的牛X一点就是"mp4文件格式剖析",最后一大堆box把我看晕了,对于box内容的理解确实对于mp4文件格式的了解有很大帮助,但是很不幸,这些文章都是堆叠abox:abox的描述,实在是让人捉摸不透。诚然,box是为了实现某些功能,或者达到目的而产生的。今天我就来写

2016-12-20 16:59:13 8088

原创 https协议握手总结

https利用了对称加密能加密大量数据,非对称加密能加密短小数据的长处,属于混合加密,不知道这样的称呼是否合适。核心在于,使用了非对称加密如RSA算法对对称加密的算法秘钥进行加密,以达到增强非对称加密算法的目的。为了便于描述我们定义几个函数:    y=sha1(x)   对数据x取摘要,hash算法是sha1    y=des(key,x)   对数据x进行加密,加密秘钥是key  

2016-12-20 11:41:40 6903

原创 GM11 C语言实现

前些日子看到了有人在论坛上求GM(1,1)的C实现版本,因为目前大多数的都是matlab版本的,原因不多说,矩阵转置求逆极其方便,而用C来做这个就得一块砖一块砖的垒起来。 好了进入正题,笔者先把代码的github地址贴出来,自己测试过,不过我没有写模型评价算法,确切的说后来写了,但是没有提交上去,很简单的运算,自己可以弄上去。github 项目地址:https://github

2016-08-22 14:43:47 6870

原创 量价线性模型假设-基于Adaboost和线性回归弱分类器

前两篇的文章中我演示了如何进行预测,但是预测的准确率一直停留在50%上下,好一点的有60%,IR就不用说了,有多有少,可操作性比较差。今天从另一个角度解释一下为什么这么难预测。先从一个有趣的题目来入手:任意打开一张图表,将价格走势图删掉一部分,但是不要删成交量的走势图,问题是,你能够根据下面的量猜出股价的走势吗?如果可以,你能以多大的概率猜准。 带着这个问题,我们进行如下的实验。为了方便叙述,价格

2016-08-08 11:43:34 7806 1

原创 算法-基于成交量的Adaboost股价涨跌预测模型

基于上篇文章提到的思路,个人觉得你不能用A来预测A,所以我打算换一种数据。 上篇文章 《算法-基于MACD的Adaboost股价涨跌预测模型》 虽然给出了adaboost算法,但是并没有完全正确的表达,尤其是在权重如何处理上,也就是如何对待那些被误分的样本。 所以打算更严谨的来对待这个算法,本着不要用错误的方法得出正确的结论的原则,我修正了我的adaboost算法,由于需要用大量的数据进行测试

2016-07-26 10:52:20 31735

原创 算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

2016-07-16 15:10:00 7554

原创 Android MVP设计模式的理解

做Android开发久了会有一种感觉,那就是业务逻辑总是伴随大量UI更新操作,最后我们的代码中UI更新伴随业务逻辑,业务逻辑发生伴随UI更新。如此纠缠,当一个类的代码越来越多的时候,过些日子再回头看,很乱很乱。作为一个长期运营的项目,这种做法是不可取的,当项目交到下一个人的手里,我只想说God will be with you. 所以从今以后,我们必须采取新的开发模式,尽管看起来繁琐一些,但是理解

2016-05-19 18:06:09 2704

原创 HorizontalListView源码解读之自己动手写ListView

这篇文章的标题可能并不像你想的一样,但是当你看完这篇文章后,你一定能够找到如何实现一个ListView的思路,下面的代码我做了注释,是来自于一个开源项目的。这个项目很简单,你可以到GitHub上搜HorizontalListView就能找到它,在这里就不贴链接了。 我推荐大家从头到尾看完源码,我已经在必要的地方做了中文注释。源码中命名也被我改了,目的是更好的理解源码,见名知意。当然,自定义View

2016-05-18 18:02:33 2879 1

原创 UniversalImageLoader源码解读07-内存泄漏和bug

UIL使用单例模式 private volatile static ImageLoader instance; /** Returns singleton class instance */ public static ImageLoader getInstance() { if (instance == null) { synchronized (ImageLoader.cl

2016-05-12 14:43:09 1530

原创 UniversalImageLoader源码解读06-任务调度

在介绍了一些基本组件后,我们越来越接近核心逻辑,任务调度设计一些数据结构,这些数据结构决定了任务如何调度。    在开始之前,笔者建议如果读者还不知道ReentrantLock Condition如何使用,建议先查一下,否则理解线程如何调度有些困难    双端队列:既可以当栈使用,又可以当做队列使用, LIFO LIFO两种    框架使用的接口/** * I

2016-05-12 09:27:40 1030

原创 UniversalImageLoader源码解读05-磁盘缓存

磁盘缓存对于UniversalImageloader也是至关重要的,我们总不能每次显示图片都要去网络获取吧,即使有内存缓存,当重启手机,或者内存缓存被清理,那么还是要从网络上去获取,这就是磁盘缓存的意义。     框架中对于磁盘缓存的抽象是DiskCache ,我们先看一下定义:public interface DiskCache { /** * 返回缓存文件夹 */ File

2016-05-11 19:28:58 773

原创 UniversalImageLoader源码解读04-内存缓存

写到这里,我们越来越接近UniversalImageLoader的核心的,内存缓存和磁盘缓存是它的主要功能, 此外还有调度功能,也是很重要的一部分在com.nostra13.universalimageloader.cache.memory 包和com.nostra13.universalimageloader.cache.memory.impl 下核心接口:public in

2016-05-11 18:40:31 891

原创 UniversalImageLoader源码解读03-一些无关紧要的小类

在继续向下解读源码之前,我想介绍一下一些无关紧要的小类,这些类对于理解源码的主干帮助并不大,但是,了解这些类做到心中有数,对于源码的阅读速度是至关重要的。笔者就是通过阅读这些无关紧要的小类开始,逐步深入到主干。1,一些listener ,在com.nostra13.universalimageloader.core.listener包下, 主要的作用是监听图片的加载,以及控制图片的加载如果

2016-05-11 18:04:16 595

原创 UniversalImageLoader源码解读02-图片处理和显示

好了,有了ImageAware,我们知道是谁包装了我们的ImageView, 图片在哪里显示,现在我们把目光转向Bitmap的处理。    BitmapProcessor, 这个接口非常简单,只有一个方法Bitmap process(Bitmap bitmap); 可惜的是,框架并没有给我们提供默认实现,我们需要自己实现。比如我们想在图片的右下角加个水印,或者将图片变成灰度图,或者做个高斯

2016-05-11 17:09:17 1017

原创 UniversalImageLoader源码解读01-用来显示图片的ImageAware

Android平台下有一个著名的图片加载框架叫UniversalImageLoader,这个框架经过几次重构才有今天,有良好的扩展性。如果你曾经在ListView中加载图片出现过图片错乱,如果你曾经因加载图片过多而遇到OOM,那么你应该考虑使用UniversalImageLoader了。    UniversalImageLoader支持二级缓存,内存+磁盘缓存,图片一旦从网络下载后会

2016-05-11 16:02:22 1916

使用LiveData的MVP模式Demo

使用LiveData的MVP模式Demo,解决了传统MVP模式接口爆炸的问题,新的MVP设计模式耦合性更低,不强制用户必须实现大量接口

2018-07-04

基于LiveData的MVP设计模式Demo

基于LiveData的MVP设计模式Demo,没有大量的接口,业务逻辑给予状态机,而状态是被观察的对象,在观察者里更新UI

2018-07-04

Android使用ffmpeg和MediaCodec解码h265裸流(没解码的代码))

具有硬解的能力,但是需要android 4.1以上才能支持。 这个demo主要是测试硬解和软解h265裸流的能力,有一些手机可能不支持硬解,因此硬解和软解的效率是大致相当的。硬解H265使用的是MediaCodec+ffmpeg方案,ffmepg负责拆包,MediaCodec负责解码和渲染,祝你愉快

2017-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除