diff --git a/src/main/org/apache/tools/ant/taskdefs/Get.java b/src/main/org/apache/tools/ant/taskdefs/Get.java index 1f89a08b3..a72313264 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Get.java +++ b/src/main/org/apache/tools/ant/taskdefs/Get.java @@ -363,48 +363,51 @@ public class Get extends Task { int bits24; int bits6; - StringBuffer buf = new StringBuffer(); + char[] out = new char[((octetString.length - 1) / 3 + 1) * 4]; + int outIndex = 0; int i = 0; while ((i + 3) <= octetString.length) { // store the octets bits24 = (octetString[i++] & 0xFF) << 16; bits24 |= (octetString[i++] & 0xFF) << 8; + bits24 |= octetString[i++]; bits6 = (bits24 & 0x00FC0000) >> 18; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x0003F000) >> 12; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x00000FC0) >> 6; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x0000003F); - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; } if (octetString.length - i == 2) { // store the octets bits24 = (octetString[i] & 0xFF) << 16; bits24 |= (octetString[i + 1] & 0xFF) << 8; bits6 = (bits24 & 0x00FC0000) >> 18; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x0003F000) >> 12; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x00000FC0) >> 6; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; // padding - buf.append('='); + out[outIndex++] = '='; } else if (octetString.length - i == 1) { // store the octets bits24 = (octetString[i] & 0xFF) << 16; bits6 = (bits24 & 0x00FC0000) >> 18; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; bits6 = (bits24 & 0x0003F000) >> 12; - buf.append(alphabet[bits6]); + out[outIndex++] = alphabet[bits6]; // padding - buf.append("=="); + out[outIndex++] = '='; + out[outIndex++] = '='; } - return buf.toString(); + return new String(out); } }