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、StackOverflow、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 进行编译,有如下输出:

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

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

再仔细看看官方(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 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库

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

  4. [收藏] Java源码阅读的真实体会

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

  5. Java源码解读(一)——HashMap

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

  6. Java源码阅读的真实体会(一种学习思路)

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

  7. Java源码阅读的真实体会(一种学习思路)【转】

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

  8. 从Java源码到Java字节码

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

  9. Android反编译(一)之反编译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. JSP中文编码问题

    这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncoding="UTF- ...

  2. A New Change Problem

    题目链接 /* 给定两个互质的数,a,b,求这两个数不能表示的数的最大值和个数. 最大值=a*b-a-b; 个数 =(a-1)*(b-1)/2; */ #include <set> #in ...

  3. UICollectionView 浅析

    什么是UICollectionView UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最 ...

  4. SonarQube代码质量管理平台比较好的搭建和使用资料

    http://www.voidcn.com/blog/lidujun1028/article/p-3831235.html   Sonar (SonarQube)是一个开源平台,用于管理源代码的质量. ...

  5. useradd adduer 的区别

    区别 1). 使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统She ...

  6. stray '/241' in program 错误

    意思是c/c++中的编译错误. 该错误是指源程序中有非法字符,需要去掉非法字符.一般是由于从别的地方粘贴过来造成的. 方法:1.把所粘的文字放到记事本里就行了 2.把出错行的空格删掉重新打一下试试.

  7. 修改6S Fortran77 代码,建立查找表

      逐像元大气校正,常预先计算查找表(LUT,LookUp Tabel),6S大气辐射传输模式也可以用来计算LUT.但6S源程序输出信息多,且浮点数输出精度低,不利于提取关键信息生成LUT,本文描述了 ...

  8. HDU 5480 Conturbatio

    区间求和不更新,开个数组记录一下前缀和就可以了 #include<cstdio> #include<cstring> #include<cmath> #includ ...

  9. Ubuntu VPN PPTP 连接要选上这个啊

    选上MPPE点到点加密..

  10. 【转】Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题

    .htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...