< 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 >