diff --git a/native/jni/src/utils/int_array_view.h b/native/jni/src/utils/int_array_view.h
index 08256bdef15f07f7c620cc00a0e406b0fce3a51b..c39add9fe5f7d86d9bbc477c174bb8dfb814eab4 100644
--- a/native/jni/src/utils/int_array_view.h
+++ b/native/jni/src/utils/int_array_view.h
@@ -17,8 +17,9 @@
 #ifndef LATINIME_INT_ARRAY_VIEW_H
 #define LATINIME_INT_ARRAY_VIEW_H
 
+#include <array>
 #include <cstdint>
-#include <cstdlib>
+#include <cstring>
 #include <vector>
 
 #include "defines.h"
@@ -103,6 +104,12 @@ class IntArrayView {
         return IntArrayView(mPtr + n, mSize - n);
     }
 
+    template <size_t N>
+    void copyToArray(std::array<int, N> *const buffer, const size_t offset) const {
+        ASSERT(mSize + offset <= N);
+        memmove(buffer->data() + offset, mPtr, sizeof(int) * mSize);
+    }
+
  private:
     DISALLOW_ASSIGNMENT_OPERATOR(IntArrayView);
 
diff --git a/native/jni/tests/utils/int_array_view_test.cpp b/native/jni/tests/utils/int_array_view_test.cpp
index 93bad5822e48ac2a3cb21f90659fe4c320779f02..ec57cf59c7e42b54ef2f71a7edaba7b1082731cf 100644
--- a/native/jni/tests/utils/int_array_view_test.cpp
+++ b/native/jni/tests/utils/int_array_view_test.cpp
@@ -18,6 +18,7 @@
 
 #include <gtest/gtest.h>
 
+#include <array>
 #include <vector>
 
 namespace latinime {
@@ -89,5 +90,26 @@ TEST(IntArrayViewTest, TestSkip) {
     }
 }
 
+TEST(IntArrayViewTest, TestCopyToArray) {
+    // "{{" to suppress warning.
+    std::array<int, 7> buffer = {{10, 20, 30, 40, 50, 60, 70}};
+    const std::vector<int> intVector = {3, 2, 1, 0, -1, -2};
+    IntArrayView intArrayView(intVector);
+    intArrayView.limit(0).copyToArray(&buffer, 0);
+    EXPECT_EQ(10, buffer[0]);
+    EXPECT_EQ(20, buffer[1]);
+    intArrayView.limit(1).copyToArray(&buffer, 0);
+    EXPECT_EQ(intVector[0], buffer[0]);
+    EXPECT_EQ(20, buffer[1]);
+    intArrayView.limit(1).copyToArray(&buffer, 1);
+    EXPECT_EQ(intVector[0], buffer[0]);
+    EXPECT_EQ(intVector[0], buffer[1]);
+    intArrayView.copyToArray(&buffer, 0);
+    for (size_t i = 0; i < intArrayView.size(); ++i) {
+        EXPECT_EQ(intVector[i], buffer[i]);
+    }
+    EXPECT_EQ(70, buffer[6]);
+}
+
 }  // namespace
 }  // namespace latinime