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();
}
}
}