diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
index ca79c18e5..2904b1e77 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.cpp
@@ -43,6 +43,10 @@ TrieMap::TrieMap() : mBuffer(MAX_BUFFER_SIZE) {
     writeEntry(EMPTY_BITMAP_ENTRY, ROOT_BITMAP_ENTRY_INDEX);
 }
 
+TrieMap::TrieMap(uint8_t *const buffer, const int bufferSize)
+        : mBuffer(buffer, bufferSize,
+                BufferWithExtendableBuffer::DEFAULT_MAX_ADDITIONAL_BUFFER_SIZE) {}
+
 void TrieMap::dump(const int from, const int to) const {
     AKLOGI("BufSize: %d", mBuffer.getTailPosition());
     for (int i = from; i < to; ++i) {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.h b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.h
index db278f5f1..8b33346e6 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/utils/trie_map.h
@@ -160,6 +160,8 @@ class TrieMap {
     static const uint64_t MAX_VALUE;
 
     TrieMap();
+    // Construct TrieMap using existing data in the memory region written by save().
+    TrieMap(uint8_t *const buffer, const int bufferSize);
     void dump(const int from = 0, const int to = 0) const;
 
     bool isNearSizeLimit() const {