📄 encodeoutputstream.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 + -