emul/mini/src/main/java/java/lang/String.java
changeset 595 784aaf9ee179
parent 592 5e13b1ac2886
child 608 6e9328ca3462
     1.1 --- a/emul/mini/src/main/java/java/lang/String.java	Sat Jan 26 08:47:05 2013 +0100
     1.2 +++ b/emul/mini/src/main/java/java/lang/String.java	Mon Jan 28 12:18:24 2013 +0100
     1.3 @@ -971,10 +971,24 @@
     1.4       * @since      JDK1.1
     1.5       */
     1.6      public byte[] getBytes() {
     1.7 -        byte[] arr = new byte[length()];
     1.8 -        for (int i = 0; i < arr.length; i++) {
     1.9 -            final char v = charAt(i);
    1.10 -            arr[i] = (byte)v;
    1.11 +        int len = length();
    1.12 +        byte[] arr = new byte[len];
    1.13 +        for (int i = 0, j = 0; j < len; j++) {
    1.14 +            final int v = charAt(j);
    1.15 +            if (v < 128) {
    1.16 +                arr[i++] = (byte) v;
    1.17 +                continue;
    1.18 +            }
    1.19 +            if (v < 0x0800) {
    1.20 +                arr = System.expandArray(arr, i + 1);
    1.21 +                arr[i++] = (byte) (0xC0 | (v >> 6));
    1.22 +                arr[i++] = (byte) (0x80 | (0x3F & v));
    1.23 +                continue;
    1.24 +            }
    1.25 +            arr = System.expandArray(arr, i + 2);
    1.26 +            arr[i++] = (byte) (0xE0 | (v >> 12));
    1.27 +            arr[i++] = (byte) (0x80 | ((v >> 6) & 0x7F));
    1.28 +            arr[i++] = (byte) (0x80 | (0x3F & v));
    1.29          }
    1.30          return arr;
    1.31      }