重庆微信营销网站,如何保护自己的网站,门户网站的建设成果,wordpress运行平台最后#xff0c;Java 8发布了。 最后#xff0c;有一种执行Base64编码的标准方法。 长期以来#xff0c;我们一直依赖于Apache Commons Codec#xff08;无论如何还是很棒的#xff09;。 内存敏感的编码人员将拼命使用sun.misc.BASE64Encoder和sun.misc.BASE64DecoderJava 8发布了。 最后有一种执行Base64编码的标准方法。 长期以来我们一直依赖于Apache Commons Codec无论如何还是很棒的。 内存敏感的编码人员将拼命使用sun.misc.BASE64Encoder和sun.misc.BASE64Decoder以避免在其程序中添加额外的JAR文件前提是他们确信仅使用Sun / Oracle JDK。 这些类仍在Java 8中潜伏。 为了进行试验我提供了一个JUnit测试以显示如何使用以下API进行编码 公用编解码器org.apache.commons.codec.binary.Base64 Java 8的新java.util.Base64 Sun / Oracle JDK的常绿内部代码sun.misc.BASE64Encoder package org.gizmo.util;import java.util.Random;import org.apache.commons.codec.binary.Base64;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;import sun.misc.BASE64Encoder;public class Base64Tests {private static byte[] randomBinaryData new byte[5000000];private static long durationCommons 0;private static long durationJava8 0;private static long durationSun 0;private static byte[] encodedCommons;private static byte[] encodedJava8;private static String encodedSun;BeforeClasspublic static void setUp() throws Exception {//We want to test the APIs against the same datanew Random().nextBytes(randomBinaryData); }Testpublic void testSunBase64Encode() throws Exception {BASE64Encoder encoder new BASE64Encoder();long before System.currentTimeMillis();encodedSun encoder.encode(randomBinaryData);long after System.currentTimeMillis();durationSun after-before;System.out.println(Sun: durationSun);} Testpublic void testJava8Base64Encode() throws Exception {long before System.currentTimeMillis();java.util.Base64.Encoder encoder java.util.Base64.getEncoder();encodedJava8 encoder.encode(randomBinaryData);long after System.currentTimeMillis();durationJava8 after-before;System.out.println(Java8: durationJava8);}Testpublic void testCommonsBase64Encode() throws Exception {long before System.currentTimeMillis();encodedCommons Base64.encodeBase64(randomBinaryData);long after System.currentTimeMillis();durationCommons after-before;System.out.println(Commons: durationCommons);}AfterClasspublic static void report() throws Exception {//Sanity checkassertArrayEquals(encodedCommons, encodedJava8);System.out.println(durationCommons*1.0/durationJava8);}
} 这三种方式的性能如何 Base64似乎是一个很小的方法因此拧紧它的方法很少但是您永远不会知道表面之下的内容。 从一般的时间安排在JUnit测试中看来可以将3种方法排列成这样从最快到最慢Java 8CommonsSun。 时间示例编码大小为5,000,000的字节数组 太阳521 公地160 Java837 Java 8的方法运行速度比Commons快4倍比Sun快14倍。 但是此示例只是简单化。 一定要为自己建立基准以得出自己的结论。 那么要使用哪些API 正如任何专家都会告诉您的那样……要视情况而定。 如果您有足够的能力指示您的代码只能在Java 8及更高版本上运行则请务必使用新的java.util.Base64。 如果您只需要支持多个JDK版本和供应商则可以使用Commons Codec或其他一些第三方API。 或者等到较旧的Java不再发行或使用后再重写您宝贵的代码库。 或继续使用另一种编程语言。 注意我什至没有提到使用sun.misc.BASE64Encoder。 尽可能避免使用它。 也许有一天该类将在另一个alosJDK版本中删除……其他供应商在其他heterosJDK中不提供该类。 资源资源 http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html http://stackoverflow.com/questions/13109588/base64-encoding-in-java/22704819#22704819 http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64.html 翻译自: https://www.javacodegeeks.com/2014/04/base64-in-java-8-its-not-too-late-to-join-in-the-fun.html