⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encodeoutputstream.txt

📁 MobilerRPC enables remote procedure calls between J2ME applications and java sevlet server.
💻 TXT
字号:
import java.io.OutputStream;
import java.io.IOException;

public class EncodeOutputStream extends OutputStream
{
    static private final byte PAD = (byte)'=';
    static private byte[] ALPHABET = new byte[64];

    static
    {
        // Fill alphabet
        for(int i = 0; i < 26; i++)
        {
            ALPHABET[i] = (byte)('A' + i);
        }
        for(int i = 0; i < 26; i++)
        {
            ALPHABET[i + 26] = (byte)(i + 'a');
        }
        for(int i = 0; i < 10; i++)
        {
            ALPHABET[i + 52] = (byte)(i + '0');
        }
        ALPHABET[62] = '+';
        ALPHABET[63] = '/';
    }

    private OutputStream out = null;
    private int[] encodeArray = new int[3];
    private byte[] encodedArray = new byte[4];
    private int encodeArrayIndex = 0;
    private int writtenBlocks = 0;

    public EncodeOutputStream(OutputStream out)
    {
        this.out = out;
    }

    public void write(int b) throws IOException
    {
        encodeArray[encodeArrayIndex++] = b & 0xFF;
        if(encodeArrayIndex == 3)
        {
            encode();
            writeOutput();
            encodeArrayIndex = 0;
            encodeArray[0] = 0;
            encodeArray[1] = 0;
            encodeArray[2] = 0;
        }
    }

    public void flush() throws IOException
    {
    }

    public void close() throws IOException
    {
        if(encodeArrayIndex == 1)
        {
            encode();
            encodedArray[2] = PAD;
            encodedArray[3] = PAD;
            writeOutput();
        }
        else if(encodeArrayIndex == 2)
        {
            encode();
            encodedArray[3] = PAD;
            writeOutput();
        }
        writeNewLine();
        writeNewLine();
        out.flush();
        out.close();
    }

    private void encode()
    {
        int trinity = encodeArray[0] << 16 | encodeArray[1] << 8 | encodeArray[2];
        encodedArray[3] = ALPHABET[((trinity) & 0x3F)];
        encodedArray[2] = ALPHABET[((trinity >>> 6) & 0x3F)];
        encodedArray[1] = ALPHABET[((trinity >>> 12) & 0x3F)];
        encodedArray[0] = ALPHABET[((trinity >>> 18) & 0x3F)];
    }

    private void writeNewLine() throws IOException
    {
        out.write('\r');
        out.write('\n');
    }

    private void writeOutput() throws IOException
    {
        out.write(encodedArray);
        writtenBlocks++;
        if(writtenBlocks % 16 == 0)
            writeNewLine();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -