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. linux 显示文件或文件夹

    用 -v 很简单呀! 显示文件 ls -l | grep -v '^d'显示目录 ls -l | grep '^d'

  2. java基本输入类型数据System.out.println()或System.out.print()

  3. 团队开发里频繁使用 git rebase 来保持树的整洁好吗?

    用了以后, 树可以非常清晰, 某种程度上便于追踪, 但是 push --force 就多多了,不用呢, 合并没有远程仓库被修改的麻烦, 可是追踪又不清晰... git rebase是对commit h ...

  4. angularjs ng-switch

    <p> <a href="#" ng-click="toggle()">Toggle Section</a> </p& ...

  5. ubuntu ssh重启

    SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-g ...

  6. 鉴客 C# 抓取页面(带认证)

    1. [代码][C#]代码     01 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(""); 02 re ...

  7. zf-关于收费统计没出来监利县的问题

    这个问题一看就知道跟存储过程有关,所以我直接去后台实现类找到了这个的存储过程 存储过程里第一句就是quhua_code  从 select 开始 就是查询出 4个地方的名字 然后在把这查询出的数据给@ ...

  8. angularJS 系列(六)---$emit(), $on(), $broadcast()的使用

    下面以一个例子来讲述 angular 中的event system,有$emit(), $on(), $broadcast().效果图如下 下面的代码中,用到了 controller AS 的语法,具 ...

  9. struts2整合spring应用实例

    我们知道struts1与spring整合是靠org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来说明stru ...

  10. js-转大小写

    .toLowerCase()转小写.toUpperCase();转大写