You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Realm Kotlin SDK如何预填充realm文件 实现assetFile等效配置

Realm Kotlin SDK 实现assets目录预填充数据库方案

Realm Kotlin SDK 未提供和Java SDK 同名的assetFile()配置方法,等效能力通过initialData配置回调实现,和原Java SDK预填充逻辑行为完全一致。

实现步骤

  • 保持原有文件放置规则不变:将提前生成好的populated.realm预填充文件放在工程assets目录下。
  • 构建RealmConfiguration时,在initialData回调中判断是否为首次创建库文件,若为首次创建则直接将assets内的realm文件拷贝覆盖到Realm默认生成的空库路径即可。
  • 其余配置项(schema版本、启动压缩、加密key、主线程读写权限等)和原有逻辑保持一致。

注意:如果使用加密Realm,assets目录下存放的预填充realm文件必须使用配置中传入的完全相同的加密密钥生成,否则打开库时会抛出校验失败异常。

等效实现代码

import android.content.Context
import io.realm.kotlin.RealmConfiguration
import java.io.File
import java.io.FileOutputStream

fun getPopulatedRealmConfig(context: Context): RealmConfiguration {
    val realmName = "populated.realm"
    val encryptKey = resolveEncrypt(RealmHelperStatics.EncRealmKey).toByteArray()

    return RealmConfiguration.Builder(
        schema = setOf(/* 替换为项目中所有RealmObject实体类 */)
    )
        .schemaVersion(REALM_VERSION)
        .compactOnLaunch()
        .encryptionKey(encryptKey)
        .name(realmName)
        .allowQueriesOnUiThread(true)
        .allowWritesOnUiThread(true)
        // 等效原.assetFile()的核心逻辑
        .initialData {
            val targetRealmFile = File(configuration.path)
            // 仅首次创建空库时执行拷贝,不会覆盖后续用户产生的数据
            if (targetRealmFile.length() == 0L) {
                context.assets.open(realmName).use { inputStream ->
                    FileOutputStream(targetRealmFile).use { outputStream ->
                        inputStream.copyTo(outputStream)
                    }
                }
            }
        }
        .build()
}

逻辑说明

  • initialData回调仅在Realm文件首次创建时触发一次,和原Java SDKassetFile()的执行时机完全一致,不会重复执行覆盖本地已有数据。
  • 文件拷贝操作运行在Realm内部管控的写线程中,不需要手动做线程切换。
  • Kotlin SDK采用跨平台设计,因此没有单独封装Android平台专属的assets读取方法,将预填充逻辑开放到initialData回调中,除了assets路径外,也支持从私有目录、本地下载路径等任意位置加载预填充库文件,灵活度更高。

内容的提问来源于stack exchange,提问作者kadirgun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:21:34