void encodeFromArray()

in src/main/java/org/apache/xmlgraphics/util/io/Base64EncodeStream.java [177:244]


    void encodeFromArray(byte[] data, int offset, int len)
        throws IOException {
        byte a;
        byte b;
        byte c;
        if (len == 0) {
            return;
        }

        // System.out.println("atomLen: " + atomLen +
        //                    " len: " + len +
        //                    " offset:  " + offset);

        if (atomLen != 0) {
            switch(atomLen) {
            case 1:
                atom[1] = data[offset++];
                len--;
                atomLen++;
                if (len == 0) {
                    return;
                }
                atom[2] = data[offset++];
                len--;
                atomLen++;
                break;
            case 2:
                atom[2] = data[offset++];
                len--;
                atomLen++;
                break;
            default:
            }
            encodeAtom();
        }

        while (len >= 3) {
            a = data[offset++];
            b = data[offset++];
            c = data[offset++];

            encodeBuf[0] = PEM_ARRAY[((a >>> 2) & 0x3F)];
            encodeBuf[1] = PEM_ARRAY[(((a << 4) & 0x30) | ((b >>> 4) & 0x0F))];
            encodeBuf[2] = PEM_ARRAY[(((b << 2) & 0x3C) | ((c >>> 6) & 0x03))];
            encodeBuf[3] = PEM_ARRAY[c & 0x3F];
            out.write(encodeBuf);

            lineLen += 4;
            if (lineLen == 64) {
                out.println();
                lineLen = 0;
            }

            len -= 3;
        }

        switch (len) {
        case 1:
            atom[0] = data[offset];
            break;
        case 2:
            atom[0] = data[offset];
            atom[1] = data[offset + 1];
            break;
        default:
        }
        atomLen = len;
    }