diff --git a/library/PrimitiveExtras/PrimArray.hs b/library/PrimitiveExtras/PrimArray.hs
--- a/library/PrimitiveExtras/PrimArray.hs
+++ b/library/PrimitiveExtras/PrimArray.hs
@@ -8,6 +8,7 @@
 import qualified Data.Vector.Primitive as PrimitiveVector
 import qualified PrimitiveExtras.Folds as Folds
 import qualified PrimitiveExtras.FoldMs as FoldMs
+import qualified Data.ByteString.Short.Internal as ShortByteString
 
 
 oneHot :: Prim a => Int {-^ Size -} -> Int {-^ Index -} -> a -> PrimArray a
@@ -95,12 +96,26 @@
     size <- int
     replicateM size element
 
+cerealGetAsInMemory :: Prim element => Cereal.Get Int -> Cereal.Get (PrimArray element)
+cerealGetAsInMemory int =
+  do
+    size <- int
+    ShortByteString.SBS ba <- Cereal.getShortByteString size
+    return (PrimArray ba)
+
 cerealPut :: Prim element => Cereal.Putter Int -> Cereal.Putter element -> Cereal.Putter (PrimArray element)
 cerealPut int element primArrayValue =
   size <> elements
   where
     size = int (sizeofPrimArray primArrayValue)
     elements = traverse_ element primArrayValue
+
+cerealPutAsInMemory :: Prim element => Cereal.Putter Int -> Cereal.Putter (PrimArray element)
+cerealPutAsInMemory int primArrayValue@(PrimArray ba) =
+  size <> elements
+  where
+    size = int (sizeofPrimArray primArrayValue)
+    elements = Cereal.putShortByteString (ShortByteString.SBS ba)
 
 {-|
 Given a size of the array,
diff --git a/library/PrimitiveExtras/PrimMultiArray.hs b/library/PrimitiveExtras/PrimMultiArray.hs
--- a/library/PrimitiveExtras/PrimMultiArray.hs
+++ b/library/PrimitiveExtras/PrimMultiArray.hs
@@ -11,7 +11,9 @@
   toIndicesUnfoldM,
   toUnfoldAtM,
   cerealGet,
+  cerealGetAsInMemory,
   cerealPut,
+  cerealPutAsInMemory,
   fold,
 )
 where
@@ -90,12 +92,25 @@
     size <- int
     replicateM size (PrimArray.cerealGet int element)
 
+cerealGetAsInMemory :: Prim element => Cereal.Get Int -> Cereal.Get (PrimMultiArray element)
+cerealGetAsInMemory int =
+  do
+    size <- int
+    replicateM size (PrimArray.cerealGetAsInMemory int)
+
 cerealPut :: Prim element => Cereal.Putter Int -> Cereal.Putter element -> Cereal.Putter (PrimMultiArray element)
 cerealPut int element (PrimMultiArray outerArrayValue) =
   size <> innerArrays
   where
     size = int (sizeofUnliftedArray outerArrayValue)
     innerArrays = UnliftedArray.traverse_ (PrimArray.cerealPut int element) outerArrayValue
+
+cerealPutAsInMemory :: Prim element => Cereal.Putter Int -> Cereal.Putter (PrimMultiArray element)
+cerealPutAsInMemory int (PrimMultiArray outerArrayValue) =
+  size <> innerArrays
+  where
+    size = int (sizeofUnliftedArray outerArrayValue)
+    innerArrays = UnliftedArray.traverse_ (PrimArray.cerealPutAsInMemory int) outerArrayValue
 
 {-|
 Having a priorly computed array of inner dimension sizes,
diff --git a/primitive-extras.cabal b/primitive-extras.cabal
--- a/primitive-extras.cabal
+++ b/primitive-extras.cabal
@@ -1,7 +1,7 @@
 name:
   primitive-extras
 version:
-  0.6.3
+  0.6.4
 category:
   Primitive
 synopsis:
@@ -53,6 +53,7 @@
     PrimitiveExtras.FoldMs
   build-depends:
     base >=4.7 && <5,
+    bytestring >=0.10 && <0.11,
     cereal >=0.5.5 && <0.6,
     deferred-folds >=0.6.5 && <0.7,
     focus >=1 && <1.1,
