### Question:
DataUtil { public static byte[][] getPartArray2D(byte[][] bb, int k) { if (k == 0 || k > bb.length) { return null; } int pos = 0; if (k < 0) { pos = bb.length + k; if (pos < 0) { return null; } k = -k; } byte[][] partArray2D = new byte[k][]; System.arraycopy(bb, pos, partArray2D, 0, k); return partArray2D; }  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 testGetPartArray2D(){ int k = 8, m = 3; int n = k + m; int len = 8; byte[][] bb = 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); } bb[i][j] = (byte) (i + j); } } byte[][] headK = DataUtil.getPartArray2D(bb, k); assertArray2DEquals(a, headK); byte[][] tailM = DataUtil.getPartArray2D(bb, -m); assertArray2DEquals(b, tailM); }