code: static String escapeBytes(final ByteString input) {
      final StringBuilder builder = new StringBuilder(input.size());
      for (int i = 0; i < input.size(); i++) {
        final byte b = input.byteAt(i);
        switch (b) {
        // Java does not recognize \a or \v, apparently.
          case 0x07:
            builder.append("\\a");
            break;
          case '\b':
            builder.append("\\b");
            break;
          case '\f':
            builder.append("\\f");
            break;
          case '\n':
            builder.append("\\n");
            break;
          case '\r':
            builder.append("\\r");
            break;
          case '\t':
            builder.append("\\t");
            break;
          case 0x0b:
            builder.append("\\v");
            break;
          case '\\':
            builder.append("\\\\");
            break;
          case '\'':
            builder.append("\\\'");
            break;
          case '"':
            builder.append("\\\"");
            break;
          default:
            // Note: Bytes with the high-order bit set should be escaped. Since
            // bytes are signed, such bytes will compare less than 0x20, hence
            // the following line is correct.
            if (b >= 0x20) {
              builder.append((char) b);
            } else {
              builder.append('\\');
              builder.append((char) ('0' + (b >>> 6 & 3)));
              builder.append((char) ('0' + (b >>> 3 & 7)));
              builder.append((char) ('0' + (b & 7)));
            }
            break;
        }
      }
      return builder.toString();
    }
docs: Escapes bytes in the format used in protocol buffer text format, which is the same as the
  format used for C string literals. All bytes that are not printable 7-bit ASCII characters are
  escaped, as well as backslash, single-quote, and double-quote characters. Characters for which
  no defined short-hand escape sequence is defined will be escaped using 3-digit octal sequences.