If you execute the following function,  what do you think should be the size of the 'def' byte array?
The logic is really simple: an input as byte array that have two elements, then create a string out of this with 'UTF-8' encoding, then create another byte array using this string with the same UTF-8 encoding.
 public static void testStringUTF8() {
  byte[] abc = new byte[2];
  abc[0] = 31;
  abc[1] = -117;
  try {
   String stringAbc = new String(abc, "UTF-8");
   byte[] def = stringAbc.getBytes("UTF-8");
   if (def != null) {
    System.out.println("size of output byte array:" + def.length);  //print the array size
   }
   
   System.out.println(def[1]);  //print the second element of the output byte array
   System.out.println(abc[1]); //print the second element of the input byte array
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
---------------
 
answer:
ReplyDeletesize of output byte array:4
-17
-117
It was run in USA based environment (charset windows-1252).
The input byte array size is 2, after 'new String' and 'getBytes' calls with UTF-8 encoding, the output size is 4.
This kind of code, sometimes, could cause bugs in compression and/or encryption methods.