< prev index next >

src/java.base/share/classes/java/util/Base64.java

Print this page

        

*** 29,38 **** --- 29,39 ---- import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; + import jdk.internal.HotSpotIntrinsicCandidate; /** * This class consists exclusively of static methods for obtaining * encoders and decoders for the Base64 encoding scheme. The * implementation of this class supports the following types of Base64
*** 388,416 **** if (!doPadding) return this; return new Encoder(isURL, newline, linemax, false); } private int encode0(byte[] src, int off, int end, byte[] dst) { char[] base64 = isURL ? toBase64URL : toBase64; int sp = off; int slen = (end - off) / 3 * 3; int sl = off + slen; if (linemax > 0 && slen > linemax / 4 * 3) slen = linemax / 4 * 3; int dp = 0; while (sp < sl) { int sl0 = Math.min(sp + slen, sl); ! for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) { ! int bits = (src[sp0++] & 0xff) << 16 | ! (src[sp0++] & 0xff) << 8 | ! (src[sp0++] & 0xff); ! dst[dp0++] = (byte)base64[(bits >>> 18) & 0x3f]; ! dst[dp0++] = (byte)base64[(bits >>> 12) & 0x3f]; ! dst[dp0++] = (byte)base64[(bits >>> 6) & 0x3f]; ! dst[dp0++] = (byte)base64[bits & 0x3f]; ! } int dlen = (sl0 - sp) / 3 * 4; dp += dlen; sp = sl0; if (dlen == linemax && sp < end) { for (byte b : newline){ --- 389,423 ---- if (!doPadding) return this; return new Encoder(isURL, newline, linemax, false); } + @HotSpotIntrinsicCandidate + private void encodeBlock(byte[] src, int sp, int sl, byte[] dst, int dp, boolean isURL) { + char[] base64 = isURL ? toBase64URL : toBase64; + for (int sp0 = sp, dp0 = dp ; sp0 < sl; ) { + int bits = (src[sp0++] & 0xff) << 16 | + (src[sp0++] & 0xff) << 8 | + (src[sp0++] & 0xff); + dst[dp0++] = (byte)base64[(bits >>> 18) & 0x3f]; + dst[dp0++] = (byte)base64[(bits >>> 12) & 0x3f]; + dst[dp0++] = (byte)base64[(bits >>> 6) & 0x3f]; + dst[dp0++] = (byte)base64[bits & 0x3f]; + } + } + private int encode0(byte[] src, int off, int end, byte[] dst) { char[] base64 = isURL ? toBase64URL : toBase64; int sp = off; int slen = (end - off) / 3 * 3; int sl = off + slen; if (linemax > 0 && slen > linemax / 4 * 3) slen = linemax / 4 * 3; int dp = 0; while (sp < sl) { int sl0 = Math.min(sp + slen, sl); ! encodeBlock(src, sp, sl0, dst, dp, isURL); int dlen = (sl0 - sp) / 3 * 4; dp += dlen; sp = sl0; if (dlen == linemax && sp < end) { for (byte b : newline){
< prev index next >