public void encodeWordData()

in geronimo-mail_2.1_spec/src/main/java/org/apache/geronimo/mail/util/Base64Encoder.java [533:585]


    public void encodeWordData(final byte[] data, final StringBuffer out) 
    {
        final int modulus = data.length % 3;
        final int dataLength = (data.length - modulus);
        int a1, a2, a3;

        for (int i = 0; i < dataLength; i += 3)
        {
            a1 = data[i] & 0xff;
            a2 = data[i + 1] & 0xff;
            a3 = data[i + 2] & 0xff;
            
            out.append((char)encodingTable[(a1 >>> 2) & 0x3f]);
            out.append((char)encodingTable[((a1 << 4) | (a2 >>> 4)) & 0x3f]);
            out.append((char)encodingTable[((a2 << 2) | (a3 >>> 6)) & 0x3f]);
            out.append((char)encodingTable[a3 & 0x3f]);
        }

        /*
         * process the tail end.
         */
        int    b1, b2, b3;
        int    d1, d2;

        switch (modulus)
        {
        case 0:        /* nothing left to do */
            break;
        case 1:
            d1 = data[dataLength] & 0xff;
            b1 = (d1 >>> 2) & 0x3f;
            b2 = (d1 << 4) & 0x3f;

            out.append((char)encodingTable[b1]);
            out.append((char)encodingTable[b2]);
            out.append((char)padding);
            out.append((char)padding);
            break;
        case 2:
            d1 = data[dataLength] & 0xff;
            d2 = data[dataLength + 1] & 0xff;

            b1 = (d1 >>> 2) & 0x3f;
            b2 = ((d1 << 4) | (d2 >>> 4)) & 0x3f;
            b3 = (d2 << 2) & 0x3f;

            out.append((char)encodingTable[b1]);
            out.append((char)encodingTable[b2]);
            out.append((char)encodingTable[b3]);
            out.append((char)padding);
            break;
        }
    }