realm-java 源码疑问

时间:2023-01-05 08:33:19
JNIEXPORT void JNICALL Java_io_realm_internal_Group_nativeWriteToFile(
JNIEnv* env, jobject, jlong nativeGroupPtr, jstring jFileName, jbyteArray keyArray)
{
TR_ENTER_PTR(nativeGroupPtr)
StringData file_name;
KeyBuffer key(env, keyArray);
try {
JStringAccessor file_name_tmp(env, jFileName); // throws
file_name = StringData(file_name_tmp);
#ifdef REALM_ENABLE_ENCRYPTION
G(nativeGroupPtr)->write(file_name, key.data());
#else
G(nativeGroupPtr)->write(file_name);
#endif
}
CATCH_FILE(file_name)
CATCH_STD()
}
#define G(x)    reinterpret_cast<realm::Group*>(x)

Group.java

    /**
* Serializes the group to the specific file on the disk using encryption.
*
* @param file a File object representing the file.
* @param key A 64 bytes long byte array containing the key to the encrypted Realm file. Can be null if encryption
* is not required.
* @throws IOException.
*/
public void writeToFile(File file, byte[] key) throws IOException {
verifyGroupIsValid();
if (file.isFile() && file.exists()) {
throw new IllegalArgumentException("The destination file must not exist");
}
if (key != null && key.length != 64) {
throw new IllegalArgumentException("Realm AES keys must be 64 bytes long");
} nativeWriteToFile(nativePtr, file.getAbsolutePath(), key);
}
    public Group() {
this.immutable = false;
this.context = new Context();
this.nativePtr = createNative();
checkNativePtrNotZero();
}
JNIEXPORT jlong JNICALL Java_io_realm_internal_Group_createNative__(
JNIEnv*, jobject)
{
TR_ENTER()
Group *ptr = new Group();
TR("Group::createNative(): %p.", VOID_PTR(ptr))
return reinterpret_cast<jlong>(ptr);
}

CPP代码Group的实现在哪里?

源码中多次出现的

#include <realm/util/safe_int_ops.hpp>

在源码目录中为何找不到?

没错!这里说的就是 https://realm.io/cn/,下面摘选一下官方的介绍(中文版的介绍让人倍感亲切有木有):

为什么要使用Realm?

简单易用

Realm并不是一个建立在SQLite之上的ORM,而是一个基于自己的持久化引擎,简单并且快速的面向对象移动数据库。我们的用户们说分分钟就学会了怎样使用Realm,迁移App到Realm也不过只需要花几个小时,方便的Realm为他们省却了数周的开发工作。

跨平台

Realm支持iOS、OS X(Objective‑C和Swift)以及Android。Realm文件可以跨平台共享,让Java、Swift和Objective‑C使用相同的抽象模型访问,从而让您在各个平台上使用尽可能相似的业务逻辑。

快速

得益于zero-copy的设计,Realm比普通的ORM要快很多,甚至比单独无封装的SQLite还要快。请参考iOS benchmark和Android benchmark,或者看看我们的用户们在Twitter上怎么说。

支持

您可以通过以下渠道获得迅速的官方支持:Github、*、Twitter、微博。

本来想看看源码膜拜一下传说中的 zero-copy 是如何实现了,遇上如此难题,只好硬着头皮看编译文件了,在 realm-java-0.90.1\realm\realm-jni\build.gradle 中出现了如下几行代码:

import java.security.MessageDigest

ext.coreVersion = '0.100.2'

。。。

            download {
println "The core addr: http://static.realm.io/downloads/core/realm-core-android-${project.coreVersion}.tar.gz" //楼主添加的打印
src "http://static.realm.io/downloads/core/realm-core-android-${project.coreVersion}.tar.gz"
dest project.coreArchiveFile
onlyIfNewer false
}

按照官方 realm-java-0.90.1\README.md 所述,大费周折配置好编译环境之后,在cmd执行 gradlew assemble 进行编译,有如下输出:

realm-java 源码疑问

看到 http://static.realm.io/downloads/core/realm-core-android-0.100.2.tar.gz ,心中的疑问去了大半,赶紧把链接丢入某雷下载之,打开一看:

realm-java 源码疑问

果然!关键实现还是只提供了静态库和头文件啊~~~

再仔细看看官方(https://realm.io/cn/pricing/)的声明:

Realm for iOS: 免费($0.00)
Realm for Android: 免费($0.00)
本网站发布的Android与iOS的Realm版本均免费——包括应用在商业产品中,没有任何使用或者功能方面的限制。您不需要花一分钱即可使用我们提供的Realm数据库框架。另外realm-cocoa和realm-java均为开源软件,遵守Apache 2.0许可。 我们承诺保持realm-cocoarealm-java在Apache 2.0许可下的开源性,维护它们的可用性,并不断扩展它们的功能。

realm-java是开源的,但是可没说它依赖的关键库也是开源的。。。这个感觉就像遇到某大片宣传全程高清无码,看到关键时刻发现都是马赛克,哈哈哈哈~~~~

偷师不成,灰溜溜的说几句酸溜溜的话。。。

realm-java 源码疑问的更多相关文章

  1. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  2. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

  3. Java 源码学习线路————&lowbar;先JDK工具包集合&lowbar;再core包,也就是String、StringBuffer等&lowbar;Java IO类库

    http://www.iteye.com/topic/1113732 原则网址 Java源码初接触 如果你进行过一年左右的开发,喜欢用eclipse的debug功能.好了,你现在就有阅读源码的技术基础 ...

  4. &lbrack;收藏&rsqb; Java源码阅读的真实体会

    收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我 ...

  5. Java源码解读&lpar;一&rpar;——HashMap

    HashMap作为常用的一种数据结构,阅读源码去了解其底层的实现是十分有必要的.在这里也分享自己阅读源码遇到的困难以及自己的思考. HashMap的源码介绍已经有许许多多的博客,这里只记录了一些我看源 ...

  6. Java源码阅读的真实体会&lpar;一种学习思路&rpar;

    Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...

  7. Java源码阅读的真实体会&lpar;一种学习思路&rpar;【转】

    Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...

  8. 从Java源码到Java字节码

    Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...

  9. Android反编译&lpar;一&rpar;之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  10. Programming a Spider in Java 源码帖

    Programming a Spider in Java 源码帖 Listing 1: Finding the bad links (CheckLinks.java) import java.awt. ...

随机推荐

  1. Tomcat 利用server&period;xml进行其他盘符的其他项目映射的部署以及JSP引用其他盘符的图片(虚拟目录及虚拟路径)

    Tomcat 利用server.xml进行项目映射的部署 2013-07-17 15:14 12843人阅读 评论(4) 收藏 举报  分类: web 开发(5)  版权声明:本文为博主原创文章,欢迎 ...

  2. Android—定位

    public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button ...

  3. 【Oralce】时间操作

    加法 select sysdate,add_months(sysdate,12) from dual;        --加1年 select sysdate,add_months(sysdate,1 ...

  4. &lbrack;ThingWorx&rsqb; Install PostgreSQL Issue

    ThingWorx application need PostgreSQL, I try configurate it in macbook. The first step is install Po ...

  5. CentOS下安装keepalived 进行服务器热备

    一.准备: 1.1 安装依赖软件 如果系统为基本文本安装,需要安装一下软件  yum -y install ipvsadm yum -y install kernel kernel-devel reb ...

  6. South——谁说Django不能migrate!

    零.前言 最近改一个项目,需要对已有的model进行更改.大家都知道Django自带的syncdb只能创建数据库,但是无法将已经改变的model应用的数据库中. 大概两年前遇到这个问题的时候,网上的答 ...

  7. asp 文件上传&lpar;无组件上传&rpar;

    文件1.上传界面文件 upload.htm<html><head><meta http-equiv="Content-Language" conten ...

  8. Ubuntu安装二:在VM中安装Ubuntu

    在VM中安装Ubuntu,先的安装VM,VM的安装请见:http://blog.csdn.net/u011043843/article/details/35291799 1.打开VM,新建虚拟机 2. ...

  9. WIX 学习笔记- 1 简介

    一个项目 Code Complete 后,程序员们欢欣鼓舞,以为事情到此结束,可以 Happy 了.其实 Code Complete 五十之于百里.一个没有运行在设备上,为人们创造价值的项目是注定失败 ...

  10. php操作xml详解

    XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交互性操作提高 ...