2014-02-20 102 views
12

我刚才想的样本代码的形式净它显示一个警告如下如何避免Base 64的警告?

SimpleConvertImage.java:7:警告:com.sun.org.apache.xerces.internal.impl.dv.util.Base64是内部专有API,可能在未来版本中删除 import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; ^

SimpleConvertImage.java:16:警告:com.sun.org.apache.xerces.internal.impl.dv.util。 Base64是内部专有API,可能在未来版本中删除 String base64String = Base64.encode(baos.toByteArray()); ^

SimpleConvertImage.java:19:警告:com.sun.org.apache.xerces.internal.impl.dv.util .Base64是内部专有API,并且可以在将来的版本 字节[移除] bytearray = Base64.decode(base64String); ^

的代码是低于一个

import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; 
public class SimpleConvertImage { 
    public static void main(String[] args) throws IOException{ 
     String dirName="/root/Desktop"; 
     ByteArrayOutputStream baos=new ByteArrayOutputStream(1000); 
     BufferedImage img=ImageIO.read(new File(dirName,"Screenshot.png")); 
     ImageIO.write(img, "png", baos); 
     baos.flush(); 

     String base64String=Base64.encode(baos.toByteArray()); 
     baos.close(); 

     byte[] bytearray =Base64.decode(base64String); 

     BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray)); 
     ImageIO.write(imag, "png", new File(dirName,"snap3.png")); 
    } 
} 

+1

警告说,这一切:你使用Xerces的是告诉类你不要使用,因为它是内部的和专有的,可能会被删除,也可能味道不好。幸运的是,还有其他的base64编码/解码选项可用:http://stackoverflow.com/questions/469695/decode-base64-data-in-java – Sneftel

+1

而在Java 8中,它终于有官方支持http:// stackoverflow。 com/a/15646871/637889 – andyb

回答

24

不要使用内部的com.sun。*包。如果您使用的是v6或更高版本,则可以使用DatatypeConverter。你的代码是这样:

String base64String = DatatypeConverter.printBase64Binary(baos.toByteArray()); 
byte[] bytearray = DatatypeConverter.parseBase64Binary(base64String); 
+0

非常感谢你,但它是“DatatypeConverter” – ambrosia1993

+0

你是正确的,我已经更新了答案 – mikea

12

您还可以使用:java.util.Base64 添加到Java 1.8

String encryptedValue = new String(Base64.getEncoder().encode(bytesToEncode)); 
byte[] decodedValue = Base64.getDecoder().decode(encryptedDataString);