ByteArrayUtil2 { @API(API.Status.MAINTAINED) @Nullable public static byte[] unprint(@Nullable String loggedBytes) { if (loggedBytes == null) { return null; } List<Byte> bytes = new ArrayList<>(); for (int i = 0; i < loggedBytes.length(); i++) { char c = loggedBytes.charAt(i); if (c == '\\') { i++; c = loggedBytes.charAt(i); if (c == '\\') { bytes.add((byte)'\\'); } else if (c == 'x') { i++; bytes.add((byte)Integer.parseInt(loggedBytes.substring(i, i + 2), 16)); i++; } else { throw new IllegalArgumentException("unexpected char at " + i); } } else { bytes.add((byte)c); } } byte[] bytesArray = new byte[bytes.size()]; for (int i = 0; i < bytes.size(); i++) { bytesArray[i] = bytes.get(i); } return bytesArray; } private  ByteArrayUtil2(); @Nullable static String toHexString(@Nullable byte[] bytes); @API(API.Status.MAINTAINED) @Nullable static String loggable(@Nullable byte[] bytes); @API(API.Status.MAINTAINED) @Nullable static byte[] unprint(@Nullable String loggedBytes); static boolean hasCommonPrefix(@Nonnull byte[] bytes1, @Nonnull byte[] bytes2, int prefixSize);  }
@Test public void testUnprint() throws Exception { byte[] allBytes = new byte[Math.abs((int)Byte.MIN_VALUE) + Byte.MAX_VALUE]; for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++) { allBytes[b - Byte.MIN_VALUE] = b; } assertArrayEquals(allBytes, ByteArrayUtil2.unprint(ByteArrayUtil2.loggable(allBytes))); assertArrayEquals(allBytes, ByteArrayUtil2.unprint(ByteArrayUtil.printable(allBytes))); }