void encode()

in common/src/main/java/com/alibaba/nacos/common/codec/Base64.java [214:279]


    void encode(byte[] in, int inPos, int inAvail) {
        if (eof) {
            return;
        }
        if (inAvail < 0) {
            eof = true;
            if (0 == modulus && lineLength == 0) {
                return;
            }
            ensureBufferSize(encodeSize);
            int savedPos = pos;
            switch (modulus) {
                case 1:
                    buffer[pos++] = encodeTable[(bitWorkArea >> 2) & MASK_6BITS];
                    buffer[pos++] = encodeTable[(bitWorkArea << 4) & MASK_6BITS];
                    
                    if (encodeTable == STANDARD_ENCODE_TABLE) {
                        buffer[pos++] = PAD;
                        buffer[pos++] = PAD;
                    }
                    break;
                
                case 2:
                    buffer[pos++] = encodeTable[(bitWorkArea >> 10) & MASK_6BITS];
                    buffer[pos++] = encodeTable[(bitWorkArea >> 4) & MASK_6BITS];
                    buffer[pos++] = encodeTable[(bitWorkArea << 2) & MASK_6BITS];
                    
                    if (encodeTable == STANDARD_ENCODE_TABLE) {
                        buffer[pos++] = PAD;
                    }
                    break;
                default:
                    break;
            }
            currentLinePos += pos - savedPos;
            /*
             if currentPos == 0 we are at the start of a line, so don't add CRLF
             */
            if (lineLength > 0 && currentLinePos > 0) {
                System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
                pos += lineSeparator.length;
            }
        } else {
            for (int i = 0; i < inAvail; i++) {
                ensureBufferSize(encodeSize);
                modulus = (modulus + 1) % BYTES_PER_UNENCODED_BLOCK;
                int b = in[inPos++];
                if (b < 0) {
                    b += 256;
                }
                bitWorkArea = (bitWorkArea << 8) + b;
                if (0 == modulus) {
                    buffer[pos++] = encodeTable[(bitWorkArea >> 18) & MASK_6BITS];
                    buffer[pos++] = encodeTable[(bitWorkArea >> 12) & MASK_6BITS];
                    buffer[pos++] = encodeTable[(bitWorkArea >> 6) & MASK_6BITS];
                    buffer[pos++] = encodeTable[bitWorkArea & MASK_6BITS];
                    currentLinePos += BYTES_PER_ENCODED_BLOCK;
                    if (lineLength > 0 && lineLength <= currentLinePos) {
                        System.arraycopy(lineSeparator, 0, buffer, pos, lineSeparator.length);
                        pos += lineSeparator.length;
                        currentLinePos = 0;
                    }
                }
            }
        }
    }