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. HDU 1072/BFS

    题目链接 Nightmare Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...

  2. 2015年4月29日 dayofweek

    #include <stdio.h>#include <stdlib.h>int DayofYear(int year, int month, int day);#define ...

  3. mapreduce 顺序组合

    import java.io.IOException;import java.util.StringTokenizer; import org.apache.hadoop.conf.Configura ...

  4. CodeForces 681C Heap Operations(模拟)

    比较简单的模拟,建议使用STL优先队列. 代码如下: #include<iostream> #include<cstdio> #include<cstring> # ...

  5. POJ - 3061 Subsequence(连续子序列和>=s的最短子序列长度)

    Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...

  6. 理解free命令

    free的输出: total used free shared buffers cached Mem: -/+ buffers/cache: Swap: 第一行: total:总内存 used:已使用 ...

  7. JSP文件上传--FileUpload组件

    如果使用上传操作,并且没有使用框架之类,最好使用Smartupload,因为FileUpdate太难使用. 下载组件: fileupload包:http://commons.apache.org/pr ...

  8. CF 389 E 贪心(第一次遇到这么水的E)

    http://codeforces.com/contest/389/problem/E 这道题目刚开始想的特别麻烦...但是没想到竟然是贪心 我们只需要知道偶数的时候可以对称取的,然后奇数的时候没次取 ...

  9. Css span div

    SPAN元素和DIV元素有什么区别 解决思路: 最明显的区别是:DIV是块元素,SPAN是内嵌元素.块元素相当于内嵌元素在前后各加一个<br>换行.其实,块元素和行内元素也不是一成不变的, ...

  10. Python3基础 函数 默认值参数示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...