package com.way.base64; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.junit.Test; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 目的:将公司的logo图片用base64弄后弄成xml传给客户端。 * 目前的功能:将图片转成byte字节后加密 * @author way * */ public class BASE64Coding { /** * 测试成功的做法 */ @Test public void encodImageByByte(){ File src = new File("./user.gif"); File dest = new File("./test.gif"); try { InputStream inputStream = new FileInputStream(src); OutputStream outputStream = new FileOutputStream(dest); BASE64Encoder base64Encoder = new sun.misc.BASE64Encoder(); BASE64Decoder base64Decoder = new sun.misc.BASE64Decoder(); byte[] b = new byte[new Long(src.length()).intValue()]; inputStream.read(b); inputStream.close(); String encode = base64Encoder.encode(b); byte[] decode = base64Decoder.decodeBuffer(encode); outputStream.write(decode); outputStream.flush(); outputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 最开始的做法 (未成功) * 1 流:与成功的做法不同,不是一次性全读,但是未成功???将byte[]容量扩大 * 2 String 与byte[]之间转化要加上charSet,并且这里必须是iso-8859-1??? * 3 最后进行write时仍然是不能成功??? */ @Test public void encodeImage(){ File src = new File("./user.gif"); File dest = new File("./test.gif"); try { InputStream inputStream = new FileInputStream(src); OutputStream outputStream = new FileOutputStream(dest); String collectB = null; // StringBuilder builder = new StringBuilder();//未成功 // byte[] b = new byte[1024]; // byte[] b = new byte[new Long(src.length()).intValue()];//成功 byte[] b = new byte[20000];//成功 int i=0; while((i=inputStream.read(b)) != -1){ System.out.println(i); collectB = new String(b,0,i,"ISO-8859-1"); } System.out.println(collectB.getBytes("ISO-8859-1").length); outputStream.write(collectB.getBytes("ISO-8859-1")); outputStream.flush(); outputStream.close(); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }