### Question:
DataUtil { public static byte[][] concatArray2D(byte[][] a, byte[][] b) { int k = a.length + b.length; byte[][] concatedArray = new byte[k][]; for (int i = 0; i < k; ++i) { if (i < a.length) { concatedArray[i] = a[i]; } else { concatedArray[i] = b[i - a.length]; } } return concatedArray; }  static byte[][] arrayToArray2D(byte[] b, int k); static byte[] array2DToArray(byte[][] bb); static byte[][] concatArray2D(byte[][] a, byte[][] b); static byte[][] getPartArray2D(byte[][] bb, int k); static void printLineInfo(String msg);  }### Answer:
@Test public void testConcatArray2D() { int k = 8, m = 3; int n = k + m; int len = 8; byte[][] expected = new byte[n][len]; byte[][] a = new byte[k][len]; byte[][] b = new byte[m][len]; for (int i = 0; i < n; ++i) { for (int j = 0; j < len; ++j) { if (i < k) { a[i][j] = (byte) (i + j); } else { b[i - k][j] = (byte) (i + j); } expected[i][j] = (byte) (i + j); } } byte[][] ab = DataUtil.concatArray2D(a, b); assertArray2DEquals(expected, ab); }