日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳細(xì)分析JAVA8新特性 Base64

瀏覽:143日期:2022-08-27 15:34:55

BASE64 編碼是一種常用的字符編碼,在很多地方都會(huì)用到。但base64不是安全領(lǐng)域下的加密解密算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應(yīng)該是傳輸數(shù)據(jù)的正確性,有些網(wǎng)關(guān)或系統(tǒng)只能使用ASCII字符。Base64就是用來(lái)將非ASCII字符的數(shù)據(jù)轉(zhuǎn)換成ASCII字符的一種方法,而且base64特別適合在http,mime協(xié)議下快速傳輸數(shù)據(jù)。

JDK里面實(shí)現(xiàn)Base64的API

在JDK1.6之前,JDK核心類(lèi)一直沒(méi)有Base64的實(shí)現(xiàn)類(lèi),有人建議用Sun/Oracle JDK里面的sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder,使用它們的優(yōu)點(diǎn)就是不需要依賴第三方類(lèi)庫(kù),缺點(diǎn)就是可能在未來(lái)版本會(huì)被刪除(用maven編譯會(huì)發(fā)出警告),而且性能不佳,后面會(huì)有性能測(cè)試。

JDK1.6中添加了另一個(gè)Base64的實(shí)現(xiàn),javax.xml.bind.DatatypeConverter兩個(gè)靜態(tài)方法parseBase64Binary 和 printBase64Binary,隱藏在javax.xml.bind包下面,不被很多開(kāi)發(fā)者知道。

在Java 8在java.util包下面實(shí)現(xiàn)了BASE64編解碼API,而且性能不俗,API也簡(jiǎn)單易懂,下面展示下這個(gè)類(lèi)的使用例子。

java.util.Base64

該類(lèi)提供了一套靜態(tài)方法獲取下面三種BASE64編解碼器:

1)Basic編碼:是標(biāo)準(zhǔn)的BASE64編碼,用于處理常規(guī)的需求

// 編碼String asB64 = Base64.getEncoder().encodeToString('some string'.getBytes('utf-8'));System.out.println(asB64); // 輸出為: c29tZSBzdHJpbmc=// 解碼byte[] asBytes = Base64.getDecoder().decode('c29tZSBzdHJpbmc=');System.out.println(new String(asBytes, 'utf-8')); // 輸出為: some string

2)URL編碼:使用下劃線替換URL里面的反斜線“/”

String urlEncoded = Base64.getUrlEncoder().encodeToString('subjects?abcd'.getBytes('utf-8'));System.out.println('Using URL Alphabet: ' + urlEncoded);// 輸出為:Using URL Alphabet: c3ViamVjdHM_YWJjZA==

3)MIME編碼:使用基本的字母數(shù)字產(chǎn)生BASE64輸出,而且對(duì)MIME格式友好:每一行輸出不超過(guò)76個(gè)字符,而且每行以“rn”符結(jié)束。

StringBuilder sb = new StringBuilder();for (int t = 0; t < 10; ++t) { sb.append(UUID.randomUUID().toString());}byte[] toEncode = sb.toString().getBytes('utf-8');String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);System.out.println(mimeEncoded);

第三方實(shí)現(xiàn)Base64的API

首先便是常用的Apache Commons Codec library里面的org.apache.commons.codec.binary.Base64;

第二個(gè)便是Google Guava庫(kù)里面的com.google.common.io.BaseEncoding.base64() 這個(gè)靜態(tài)方法;

第三個(gè)是net.iharder.Base64,這個(gè)jar包就一個(gè)類(lèi);

最后一個(gè),號(hào)稱Base64編碼速度最快的MigBase64,而且是10年前的實(shí)現(xiàn),到現(xiàn)在是否能保持這個(gè)稱號(hào),測(cè)一測(cè)便知道;

Base64編碼性能測(cè)試

上面講了一共7種實(shí)現(xiàn)Base64編碼,Jdk里面3種,第三方實(shí)現(xiàn)4種,一旦有選擇,則有必要將他們進(jìn)行一次高低對(duì)比,性能測(cè)試是最直接的方式

首先來(lái)定義兩個(gè)接口

private static interface Base64Codec { public String encode(final byte[] data); public byte[] decode(final String base64) throws IOException; } private static interface Base64ByteCodec { public byte[] encodeBytes(final byte[] data); public byte[] decodeBytes(final byte[] base64) throws IOException; }

兩個(gè)接口區(qū)別就是其中一個(gè)接口方法參數(shù)接收byte數(shù)組,返回byte數(shù)組,因?yàn)閎yte->byte相比String->byte或者byte->String性能上會(huì)快一點(diǎn),所以區(qū)分兩組來(lái)測(cè)試

private static final Base64Codec[] m_codecs = { new GuavaImpl(), new JavaXmlImpl(), new Java8Impl(), new SunImpl(), new ApacheImpl(),new MiGBase64Impl(),new IHarderImpl() };private static final Base64ByteCodec[] m_byteCodecs = { new ApacheImpl(), new Java8Impl(),new MiGBase64Impl(),new IHarderImpl() };

從上面看出,其中支持byte->byte只有4中API;

7個(gè)Base64的實(shí)現(xiàn)類(lèi)

private static class Java8Impl implements Base64Codec, Base64ByteCodec { private final Base64.Decoder m_decoder = Base64.getDecoder(); private final Base64.Encoder m_encoder = Base64.getEncoder(); @Override public String encode(byte[] data) { return m_encoder.encodeToString(data); } @Override public byte[] decode(String base64) throws IOException { return m_decoder.decode(base64); } public byte[] encodeBytes(byte[] data) { return m_encoder.encode( data ); } public byte[] decodeBytes(byte[] base64) throws IOException { return m_decoder.decode( base64 ); } } private static class JavaXmlImpl implements Base64Codec //no byte[] implementation { public String encode(byte[] data) { return DatatypeConverter.printBase64Binary( data ); } public byte[] decode(String base64) throws IOException { return DatatypeConverter.parseBase64Binary( base64 ); } }

后面代碼基本就是各種API實(shí)現(xiàn)Base64的代碼了,就不詳細(xì)列出。

主要測(cè)試手段是,生成100M的隨機(jī)數(shù),分成100byte或者1000byte的塊,然后將他們分別編碼和解碼,記錄時(shí)間,如下方法

private static TestResult testByteCodec( final Base64ByteCodec codec, final List<byte[]> buffers ) throws IOException { final List<byte[]> encoded = new ArrayList<byte[]>( buffers.size() ); final long start = System.currentTimeMillis(); for ( final byte[] buf : buffers ) encoded.add( codec.encodeBytes(buf) ); final long encodeTime = System.currentTimeMillis() - start; final List<byte[]> result = new ArrayList<byte[]>( buffers.size() ); final long start2 = System.currentTimeMillis(); for ( final byte[] ar : encoded ) result.add( codec.decodeBytes(ar) ); final long decodeTime = System.currentTimeMillis() - start2; for ( int i = 0; i < buffers.size(); ++i ) { if ( !Arrays.equals( buffers.get( i ), result.get( i ) ) ) System.out.println( 'Diff at pos = ' + i ); } return new TestResult( encodeTime / 1000.0, decodeTime / 1000.0 ); }

測(cè)試結(jié)果

jvm參數(shù):-Xms512m -Xmx4G

詳細(xì)分析JAVA8新特性 Base64

一切都很明顯了,從上面看出,sun的表現(xiàn)不是很好,IHarder和MigBase64性能可以接受,傳說(shuō)MigBase64性能第一,那也是過(guò)去了,在這次測(cè)試結(jié)果中,新的java8 base64運(yùn)行速度最好,javaXml表現(xiàn)次之。

總結(jié)

如果你需要一個(gè)性能好,可靠的Base64編解碼器,不要找JDK外面的了,java8里面的java.util.Base64以及java6中隱藏很深的javax.xml.bind.DatatypeConverter,他們兩個(gè)都是不錯(cuò)的選擇。

以上就是詳細(xì)分析JAVA8新特性 Base64的詳細(xì)內(nèi)容,更多關(guān)于JAVA8 Base64的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩三区免费| 欧美精品福利| 国产成人精品一区二区三区视频| 亚洲一区不卡| 伊人久久大香伊蕉在人线观看热v| 在线观看亚洲精品福利片| 中文在线日韩| **爰片久久毛片| 国产乱码午夜在线视频| 欧美 日韩 国产一区二区在线视频| 国产精品美女久久久浪潮软件| 在线日韩成人| 国产精品日韩精品在线播放| 国产一区调教| 在线亚洲成人| 欧美日本三区| 人人草在线视频| 欧美午夜精彩| 蜜臀久久99精品久久久久久9 | 伊人久久亚洲热| 亚洲欧美日本日韩| 天堂中文av在线资源库| 亚洲成av在线| 久久性天堂网| 人人精品久久| 国产91一区| 亚洲免费观看| 91大神在线观看线路一区| 精品美女久久| 性欧美69xoxoxoxo| 91精品丝袜国产高跟在线| 国产一区一一区高清不卡| 国产情侣久久| 伊人久久成人| 欧美国产中文高清| 亚洲在线网站| 亚洲欧洲高清| 国产亚洲观看| 亚洲欧洲午夜| 黑人精品一区| 日本aⅴ精品一区二区三区| 久久精品官网| 欧美日一区二区在线观看| 国产伦久视频在线观看| 日本亚洲三级在线| 国内一区二区三区| 激情欧美一区二区三区| 国产在线欧美| 人人爱人人干婷婷丁香亚洲| 久久久777| 四虎成人精品一区二区免费网站| 久久精品国产99国产| 在线一区免费| 国产成人77亚洲精品www| 在线精品福利| 精品中文一区| 国产盗摄——sm在线视频| 日韩国产成人精品| 蜜乳av另类精品一区二区| 麻豆久久一区二区| 亚洲天堂av资源在线观看| 97人人精品| 国产99亚洲| 国产区精品区| 日韩福利视频网| 午夜精品影院| 久久精品电影| 日韩av网站在线观看| 成人免费电影网址| 免费日韩一区二区三区| 蜜桃一区二区三区在线观看| 四虎影视精品| 国产精品yjizz视频网| 久久99视频| 国产极品一区| 国产精品免费精品自在线观看| 亚洲尤物av| 午夜电影亚洲| 91成人精品视频| 国产二区精品| 美女网站视频一区| 91精品xxx在线观看| 四季av一区二区凹凸精品| 久久久亚洲欧洲日产| 欧美日韩调教| 国产精品玖玖玖在线资源| 国产日韩欧美三级| 国产精品一二| 国产精品22p| 欧美激情麻豆| 精品免费av一区二区三区| 美女在线视频一区| 麻豆成人综合网| 日韩综合一区二区| 日韩精品欧美大片| 青青在线精品| 国产精品mm| 国产伊人久久| 超碰99在线| 欧美+亚洲+精品+三区| 欧美日韩国产在线一区| 欧美日韩高清| 综合激情视频| 日韩专区视频网站| 欧美日韩亚洲一区| 另类综合日韩欧美亚洲| www.九色在线| 亚洲二区在线| 亚洲男女av一区二区| 免费观看在线综合色| 欧美视频精品全部免费观看| 国产精品videossex| 精品72久久久久中文字幕| 伊人久久高清| 美女精品网站| 国产乱子精品一区二区在线观看| 欧美成人一二区| 久久视频一区| 亚洲精品黄色| 激情不卡一区二区三区视频在线| 另类中文字幕国产精品| 亚洲免费激情| 国产欧美亚洲一区| 国产精品一区二区免费福利视频| 国内精品麻豆美女在线播放视频| 99精品在线观看| 久久香蕉精品| 国产精品一区二区精品视频观看| 国产自产自拍视频在线观看| 在线看片福利| 亚洲开心激情| 国产在线观看www| 激情婷婷欧美| 日韩精品乱码av一区二区| 国产精品久av福利在线观看| 精品欧美一区二区三区在线观看| 巨乳诱惑日韩免费av| 精品中国亚洲| 最新中文字幕在线播放| 伊人影院久久| 麻豆91在线播放| 欧美资源在线| 国产91在线播放精品| 蜜臀a∨国产成人精品| 国产一区二区视频在线看| 免费日韩av| 荡女精品导航| 午夜久久av | 欧美手机在线| 日本亚洲视频在线| 精品免费av在线| 国产香蕉精品| 欧美日韩日本国产亚洲在线 | 亚洲国内精品| 国产精品一国产精品k频道56| 国产91精品对白在线播放| 欧美一区激情| 日韩av免费| 久久精品97| 免费精品视频| 国产精品久久久久av电视剧| 91亚洲精品在看在线观看高清| 亚洲先锋成人| 国产精品成人a在线观看| 亚洲性视频在线| 久久高清免费| 久久av综合| 日韩精品三级| 香蕉久久夜色精品国产| 日本在线精品| 色爱综合网欧美| 欧美久久香蕉| 在线看片日韩| 国产a亚洲精品| 久久国产婷婷国产香蕉| 香蕉成人久久| 欧美美女一区| 人人草在线视频| 国产一区二区三区四区大秀| 国产日韩欧美一区二区三区 | 蜜桃视频欧美| 三级在线看中文字幕完整版| 国产日韩在线观看视频| 在线精品国产亚洲| 国产手机视频一区二区 | 久久av在线| 欧美午夜精彩| 超碰99在线| 福利精品在线| 动漫av一区| 精品一区二区三区四区五区| 国产亚洲一区二区三区不卡| 国产精品丝袜xxxxxxx| 激情婷婷亚洲| 激情偷拍久久| 精品中文一区| 欧美午夜不卡影院在线观看完整版免费| 九色porny丨国产首页在线| 国产欧美一区二区色老头| 久久国产麻豆精品|