diff --git a/datokenizer.go b/datokenizer.go
index 270b61e..f1f8b0c 100644
--- a/datokenizer.go
+++ b/datokenizer.go
@@ -987,22 +987,20 @@
 	// Read based on length
 	dat.array = make([]uint32, arraySize)
 
-	for x := 0; x < arraySize; x++ {
-		more, err = io.ReadFull(r, buf[0:4])
-		if err != nil {
-			if err == io.EOF {
-				fmt.Println(arraySize, x)
-				break
-			}
-			log.Error().Err(err)
-			return nil
-		}
-		if more != 4 {
-			log.Error().Msg("Not enough bytes read")
-			return nil
-		}
+	dataArray, err := io.ReadAll(r)
 
-		dat.array[x] = bo.Uint32(buf[0:4])
+	if err == io.EOF {
+		log.Error().Err(err)
+		return nil
+	}
+
+	if len(dataArray) < arraySize*4 {
+		log.Error().Msg("Not enough bytes read")
+		return nil
+	}
+
+	for x := 0; x < arraySize; x++ {
+		dat.array[x] = bo.Uint32(dataArray[x*4 : (x*4)+4])
 	}
 
 	return dat
diff --git a/datokenizer_test.go b/datokenizer_test.go
index e7e37d5..ade17cf 100644
--- a/datokenizer_test.go
+++ b/datokenizer_test.go
@@ -847,9 +847,23 @@
 			os.Exit(1)
 		}
 	}
-	// 2021-08-11 (go 1.16)
-	// go test -bench=. -test.benchmem
-	//   BenchmarkTransduce-4       19069             60609 ns/op           11048 B/op        137 allocs/op
-	// 2021-08-112 (go 1.16)
-	//   BenchmarkTransduce-4       20833             55241 ns/op            9676 B/op          3 allocs/op
 }
+
+func BenchmarkLoadDatokFile(b *testing.B) {
+	for i := 0; i < b.N; i++ {
+		dat := LoadDatokFile("testdata/tokenizer.datok")
+		if dat == nil {
+			fmt.Println("Fail!")
+			os.Exit(1)
+		}
+	}
+}
+
+// 2021-08-11 (go 1.16)
+// go test -bench=. -test.benchmem
+//   BenchmarkTransduce-4         19069             60609 ns/op           11048 B/op        137 allocs/op
+// 2021-08-112 (go 1.16)
+//   BenchmarkTransduce-4         20833             55241 ns/op            9676 B/op          3 allocs/op
+//   BenchmarkLoadDatokFile-4         4         258418169 ns/op        29916470 B/op       5697 allocs/op
+//   BenchmarkTransduce-4         19430             58133 ns/op           18696 B/op          3 allocs/op
+//   BenchmarkLoadDatokFile-4         8         139071939 ns/op       203158377 B/op       5742 allocs/op
