diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.cpp
index 91c76941c8d24edde5deec77530e2b7d3b572c4d..7cb7dff9a262bbfe2cc65c5f52b6c22599be1dbd 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.cpp
@@ -31,21 +31,21 @@ const int ShortcutListReadingUtils::SHORTCUT_LIST_SIZE_FIELD_SIZE = 2;
 const int ShortcutListReadingUtils::WHITELIST_SHORTCUT_PROBABILITY = 15;
 
 /* static */ ShortcutListReadingUtils::ShortcutFlags
-        ShortcutListReadingUtils::getFlagsAndForwardPointer(const uint8_t *const dictRoot,
+        ShortcutListReadingUtils::getFlagsAndForwardPointer(const ReadOnlyByteArrayView buffer,
                 int *const pos) {
-    return ByteArrayUtils::readUint8AndAdvancePosition(dictRoot, pos);
+    return ByteArrayUtils::readUint8AndAdvancePosition(buffer.data(), pos);
 }
 
 /* static */ int ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(
-        const uint8_t *const dictRoot, int *const pos) {
+        const ReadOnlyByteArrayView buffer, int *const pos) {
     // readUint16andAdvancePosition() returns an offset *including* the uint16 field itself.
-    return ByteArrayUtils::readUint16AndAdvancePosition(dictRoot, pos)
+    return ByteArrayUtils::readUint16AndAdvancePosition(buffer.data(), pos)
             - SHORTCUT_LIST_SIZE_FIELD_SIZE;
 }
 
-/* static */ int ShortcutListReadingUtils::readShortcutTarget(
-        const uint8_t *const dictRoot, const int maxLength, int *const outWord, int *const pos) {
-    return ByteArrayUtils::readStringAndAdvancePosition(dictRoot, maxLength, outWord, pos);
+/* static */ int ShortcutListReadingUtils::readShortcutTarget(const ReadOnlyByteArrayView buffer,
+        const int maxLength, int *const outWord, int *const pos) {
+    return ByteArrayUtils::readStringAndAdvancePosition(buffer.data(), maxLength, outWord, pos);
 }
 
 } // namespace latinime
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h
index d065bf7fd87cebf01a96a8136a751b8e4f4eaae6..71cb8cc2ce0bb81168d61ecc3644a1c04454aee0 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h
@@ -20,6 +20,7 @@
 #include <cstdint>
 
 #include "defines.h"
+#include "utils/byte_array_view.h"
 
 namespace latinime {
 
@@ -27,7 +28,8 @@ class ShortcutListReadingUtils {
  public:
     typedef uint8_t ShortcutFlags;
 
-    static ShortcutFlags getFlagsAndForwardPointer(const uint8_t *const dictRoot, int *const pos);
+    static ShortcutFlags getFlagsAndForwardPointer(const ReadOnlyByteArrayView buffer,
+            int *const pos);
 
     static AK_FORCE_INLINE int getProbabilityFromFlags(const ShortcutFlags flags) {
         return flags & MASK_ATTRIBUTE_PROBABILITY;
@@ -39,14 +41,15 @@ class ShortcutListReadingUtils {
 
     // This method returns the size of the shortcut list region excluding the shortcut list size
     // field at the beginning.
-    static int getShortcutListSizeAndForwardPointer(const uint8_t *const dictRoot, int *const pos);
+    static int getShortcutListSizeAndForwardPointer(const ReadOnlyByteArrayView buffer,
+            int *const pos);
 
     static AK_FORCE_INLINE int getShortcutListSizeFieldSize() {
         return SHORTCUT_LIST_SIZE_FIELD_SIZE;
     }
 
-    static AK_FORCE_INLINE void skipShortcuts(const uint8_t *const dictRoot, int *const pos) {
-        const int shortcutListSize = getShortcutListSizeAndForwardPointer(dictRoot, pos);
+    static AK_FORCE_INLINE void skipShortcuts(const ReadOnlyByteArrayView buffer, int *const pos) {
+        const int shortcutListSize = getShortcutListSizeAndForwardPointer(buffer, pos);
         *pos += shortcutListSize;
     }
 
@@ -54,7 +57,7 @@ class ShortcutListReadingUtils {
         return getProbabilityFromFlags(flags) == WHITELIST_SHORTCUT_PROBABILITY;
     }
 
-    static int readShortcutTarget(const uint8_t *const dictRoot, const int maxLength,
+    static int readShortcutTarget(const ReadOnlyByteArrayView buffer, const int maxLength,
             int *const outWord, int *const pos);
 
  private:
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
index 9a789fa5c6a8e3912329422c4e5776268441b4ab..64b767daccf83abdf04499c0725610723a16e855 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.cpp
@@ -454,16 +454,14 @@ const WordProperty PatriciaTriePolicy::getWordProperty(
     int shortcutPos = getShortcutPositionOfPtNode(ptNodePos);
     if (shortcutPos != NOT_A_DICT_POS) {
         int shortcutTargetCodePoints[MAX_WORD_LENGTH];
-        ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(mBuffer.data(),
-                &shortcutPos);
+        ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(mBuffer, &shortcutPos);
         bool hasNext = true;
         while (hasNext) {
             const ShortcutListReadingUtils::ShortcutFlags shortcutFlags =
-                    ShortcutListReadingUtils::getFlagsAndForwardPointer(mBuffer.data(),
-                            &shortcutPos);
+                    ShortcutListReadingUtils::getFlagsAndForwardPointer(mBuffer, &shortcutPos);
             hasNext = ShortcutListReadingUtils::hasNext(shortcutFlags);
             const int shortcutTargetLength = ShortcutListReadingUtils::readShortcutTarget(
-                    mBuffer.data(), MAX_WORD_LENGTH, shortcutTargetCodePoints, &shortcutPos);
+                    mBuffer, MAX_WORD_LENGTH, shortcutTargetCodePoints, &shortcutPos);
             const std::vector<int> shortcutTarget(shortcutTargetCodePoints,
                     shortcutTargetCodePoints + shortcutTargetLength);
             const int shortcutProbability =
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
index 1e95a99ca0b10d042f23677ba4176543248666f3..a2ffc0c3c5065f4013f4a7beb6d6736a80efc97b 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/patricia_trie_policy.h
@@ -45,8 +45,7 @@ class PatriciaTriePolicy : public DictionaryStructureWithBufferPolicy {
               mHeaderPolicy(mMmappedBuffer->getReadOnlyByteArrayView().data(),
                       FormatUtils::VERSION_2),
               mBuffer(mMmappedBuffer->getReadOnlyByteArrayView().skip(mHeaderPolicy.getSize())),
-              mBigramListPolicy(mBuffer.data(), mBuffer.size()),
-              mShortcutListPolicy(mBuffer.data()),
+              mBigramListPolicy(mBuffer), mShortcutListPolicy(mBuffer),
               mPtNodeReader(mBuffer.data(), mBuffer.size(), &mBigramListPolicy,
                       &mShortcutListPolicy),
               mPtNodeArrayReader(mBuffer.data(), mBuffer.size()),
diff --git a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/shortcut/shortcut_list_policy.h b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/shortcut/shortcut_list_policy.h
index 8e16ccc05ba22f9c18f559138e7f00a4e2625e8d..5319dd26c860fc55fec13e4bf59426d6badfcae6 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/structure/v2/shortcut/shortcut_list_policy.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/structure/v2/shortcut/shortcut_list_policy.h
@@ -22,13 +22,13 @@
 #include "defines.h"
 #include "suggest/core/policy/dictionary_shortcuts_structure_policy.h"
 #include "suggest/policyimpl/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.h"
+#include "utils/byte_array_view.h"
 
 namespace latinime {
 
 class ShortcutListPolicy : public DictionaryShortcutsStructurePolicy {
  public:
-    explicit ShortcutListPolicy(const uint8_t *const shortcutBuf)
-            : mShortcutsBuf(shortcutBuf) {}
+    explicit ShortcutListPolicy(const ReadOnlyByteArrayView buffer) : mBuffer(buffer) {}
 
     ~ShortcutListPolicy() {}
 
@@ -37,7 +37,7 @@ class ShortcutListPolicy : public DictionaryShortcutsStructurePolicy {
             return NOT_A_DICT_POS;
         }
         int listPos = pos;
-        ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(mShortcutsBuf, &listPos);
+        ShortcutListReadingUtils::getShortcutListSizeAndForwardPointer(mBuffer, &listPos);
         return listPos;
     }
 
@@ -45,7 +45,7 @@ class ShortcutListPolicy : public DictionaryShortcutsStructurePolicy {
             int *const outCodePointCount, bool *const outIsWhitelist, bool *const outHasNext,
             int *const pos) const {
         const ShortcutListReadingUtils::ShortcutFlags flags =
-                ShortcutListReadingUtils::getFlagsAndForwardPointer(mShortcutsBuf, pos);
+                ShortcutListReadingUtils::getFlagsAndForwardPointer(mBuffer, pos);
         if (outHasNext) {
             *outHasNext = ShortcutListReadingUtils::hasNext(flags);
         }
@@ -54,20 +54,20 @@ class ShortcutListPolicy : public DictionaryShortcutsStructurePolicy {
         }
         if (outCodePoint) {
             *outCodePointCount = ShortcutListReadingUtils::readShortcutTarget(
-                        mShortcutsBuf, maxCodePointCount, outCodePoint, pos);
+                    mBuffer, maxCodePointCount, outCodePoint, pos);
         }
     }
 
     void skipAllShortcuts(int *const pos) const {
         const int shortcutListSize = ShortcutListReadingUtils
-                ::getShortcutListSizeAndForwardPointer(mShortcutsBuf, pos);
+                ::getShortcutListSizeAndForwardPointer(mBuffer, pos);
         *pos += shortcutListSize;
     }
 
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(ShortcutListPolicy);
 
-    const uint8_t *const mShortcutsBuf;
+    const ReadOnlyByteArrayView mBuffer;
 };
 } // namespace latinime
 #endif // LATINIME_SHORTCUT_LIST_POLICY_H