1 package com.quadcap.io; 2 3 40 41 import java.io.ByteArrayOutputStream ; 42 import java.io.IOException ; 43 import java.io.OutputStream ; 44 45 52 public class Base64OutputStream extends OutputStream { 53 OutputStream out; 54 int accum; 55 int pos = 0; 56 public boolean doLineBreaks = true; 57 58 public static byte[] base64 = { 59 (byte)'A', (byte)'B', (byte)'C', (byte)'D', 60 (byte)'E', (byte)'F', (byte)'G', (byte)'H', 61 (byte)'I', (byte)'J', (byte)'K', (byte)'L', 62 (byte)'M', (byte)'N', (byte)'O', (byte)'P', 63 (byte)'Q', (byte)'R', (byte)'S', (byte)'T', 64 (byte)'U', (byte)'V', (byte)'W', (byte)'X', 65 (byte)'Y', (byte)'Z', (byte)'a', (byte)'b', 66 (byte)'c', (byte)'d', (byte)'e', (byte)'f', 67 (byte)'g', (byte)'h', (byte)'i', (byte)'j', 68 (byte)'k', (byte)'l', (byte)'m', (byte)'n', 69 (byte)'o', (byte)'p', (byte)'q', (byte)'r', 70 (byte)'s', (byte)'t', (byte)'u', (byte)'v', 71 (byte)'w', (byte)'x', (byte)'y', (byte)'z', 72 (byte)'0', (byte)'1', (byte)'2', (byte)'3', 73 (byte)'4', (byte)'5', (byte)'6', (byte)'7', 74 (byte)'8', (byte)'9', (byte)'+', (byte)'/' 75 }; 76 77 80 public Base64OutputStream() { 81 this.out = new ByteArrayOutputStream (); 82 } 83 84 87 public Base64OutputStream(OutputStream out) { 88 this.out = out; 89 } 90 91 94 public void write(int c) throws IOException { 95 accum <<= 8; 96 accum |= (c & 0xff); 97 if ((++pos % 3) == 0) { 98 out.write(base64[(accum >> 18) & 0x3f]); 99 out.write(base64[(accum >> 12) & 0x3f]); 100 out.write(base64[(accum >> 6) & 0x3f]); 101 out.write(base64[(accum >> 0) & 0x3f]); 102 accum = 0; 103 } 104 if (doLineBreaks && (pos % 54) == 0) { 105 out.write('\r'); 106 out.write('\n'); 107 } 108 } 109 110 113 public void finish() throws IOException { 114 int p = pos % 3; 115 if (p == 1) { 116 accum <<= 16; 117 out.write(base64[(accum >> 18) & 0x3f]); 118 out.write(base64[(accum >> 12) & 0x3f]); 119 out.write('='); 120 out.write('='); 121 } else if (p == 2) { 122 accum <<= 8; 123 out.write(base64[(accum >> 18) & 0x3f]); 124 out.write(base64[(accum >> 12) & 0x3f]); 125 out.write(base64[(accum >> 6) & 0x3f]); 126 out.write('='); 127 } 128 } 129 130 133 public String toString() { 134 return out.toString(); 135 } 136 } 137 | Popular Tags |