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

您的位置:首頁技術文章
文章詳情頁

詳細分析JAVA8新特性 Base64

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

BASE64 編碼是一種常用的字符編碼,在很多地方都會用到。但base64不是安全領域下的加密解密算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸數據的正確性,有些網關或系統只能使用ASCII字符。Base64就是用來將非ASCII字符的數據轉換成ASCII字符的一種方法,而且base64特別適合在http,mime協議下快速傳輸數據。

JDK里面實現Base64的API

在JDK1.6之前,JDK核心類一直沒有Base64的實現類,有人建議用Sun/Oracle JDK里面的sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder,使用它們的優點就是不需要依賴第三方類庫,缺點就是可能在未來版本會被刪除(用maven編譯會發出警告),而且性能不佳,后面會有性能測試。

JDK1.6中添加了另一個Base64的實現,javax.xml.bind.DatatypeConverter兩個靜態方法parseBase64Binary 和 printBase64Binary,隱藏在javax.xml.bind包下面,不被很多開發者知道。

在Java 8在java.util包下面實現了BASE64編解碼API,而且性能不俗,API也簡單易懂,下面展示下這個類的使用例子。

java.util.Base64

該類提供了一套靜態方法獲取下面三種BASE64編解碼器:

1)Basic編碼:是標準的BASE64編碼,用于處理常規的需求

// 編碼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編碼:使用基本的字母數字產生BASE64輸出,而且對MIME格式友好:每一行輸出不超過76個字符,而且每行以“rn”符結束。

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

第三方實現Base64的API

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

第二個便是Google Guava庫里面的com.google.common.io.BaseEncoding.base64() 這個靜態方法;

第三個是net.iharder.Base64,這個jar包就一個類;

最后一個,號稱Base64編碼速度最快的MigBase64,而且是10年前的實現,到現在是否能保持這個稱號,測一測便知道;

Base64編碼性能測試

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

首先來定義兩個接口

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

兩個接口區別就是其中一個接口方法參數接收byte數組,返回byte數組,因為byte->byte相比String->byte或者byte->String性能上會快一點,所以區分兩組來測試

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個Base64的實現類

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實現Base64的代碼了,就不詳細列出。

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

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

測試結果

jvm參數:-Xms512m -Xmx4G

詳細分析JAVA8新特性 Base64

一切都很明顯了,從上面看出,sun的表現不是很好,IHarder和MigBase64性能可以接受,傳說MigBase64性能第一,那也是過去了,在這次測試結果中,新的java8 base64運行速度最好,javaXml表現次之。

總結

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

以上就是詳細分析JAVA8新特性 Base64的詳細內容,更多關于JAVA8 Base64的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美影院三区| 久久亚洲精品伦理| 综合一区av| 欧美一区二区三区久久精品| 久久精品免视看国产成人| 麻豆成人av在线| 精品国产免费人成网站| 欧美特黄视频| 国产欧美亚洲一区| 久久久一本精品| 蜜桃91丨九色丨蝌蚪91桃色| 国产女人18毛片水真多18精品| 美女精品一区二区| 日韩欧美一区二区三区在线观看| 99热免费精品| 国产日韩视频在线| 久久一区二区中文字幕| 亚州av日韩av| 三级精品视频| 91精品国产一区二区在线观看 | 国产乱码精品| 国产综合精品| 国产精品巨作av| 在线成人动漫av| 最新国产精品| 亚洲永久av| 亚洲永久精品唐人导航网址| 欧美国产美女| 日韩高清一区在线 | 亚洲午夜视频| 国产精品一区二区精品| 国产一在线精品一区在线观看| 国产日韩视频在线| 不卡av一区二区| 福利一区二区免费视频| 综合亚洲自拍| 欧美va天堂| 亚洲欧洲美洲av| 91精品国产自产精品男人的天堂 | 高潮一区二区| 久久97视频| 亚洲欧美专区| 伊人久久亚洲影院| 日韩在线看片| 国产不卡精品| 国产图片一区| 中文无码日韩欧| 国内亚洲精品| 午夜精品久久久久久久久久蜜桃| 美女久久久久久| 日韩av不卡在线观看| 一区在线视频观看| 欧洲亚洲一区二区三区| 红杏一区二区三区| 久久不卡日韩美女| 国产日韩一区二区三区在线播放| 中文一区一区三区免费在线观 | 欧美日韩国产高清| 亚洲成人精品| 欧美日韩视频免费观看| 精品三级在线观看视频| 国产精品一站二站| 国产精品久久久久久久久久白浆| 日韩欧美中文在线观看| 蜜臀久久久99精品久久久久久| 五月天激情综合网| 久久久久99| 成人精品亚洲| 久久精品国语| 欧美国产91| 久久精品国产www456c0m| 91精品国产福利在线观看麻豆| 日本久久精品| 蜜桃av在线播放| 亚洲成a人片| 久久国产中文字幕| 99国内精品| 国产精品日韩久久久| 国产精品美女| 在线精品观看| 热久久久久久| 欧美91在线| 国语对白精品一区二区| 黄色网一区二区| 98精品久久久久久久| 日韩免费av| 99在线精品免费视频九九视| 久久高清一区| 日韩一二三区在线观看| 国产欧美日韩| 国产精品毛片久久| 亚洲精品电影| 青草久久视频| 久久三级中文| 中文字幕系列一区| 蜜臀久久99精品久久久画质超高清| 亚洲视频二区| 国产精品一二| 欧美亚洲精品在线| 亚洲一区二区三区四区电影 | 91综合久久爱com| 国产极品嫩模在线观看91精品| 国产一区二区亚洲| 午夜欧美在线| 日韩国产在线一| 久久一区亚洲| 亚洲精品电影| 欧美视频二区| 日韩成人亚洲| 亚洲不卡视频| 精品五月天堂| 亚洲欧美日韩高清在线| 久久国际精品| 久久美女精品| 欧美日韩调教| 亚洲福利一区| 97久久中文字幕| 日韩av福利| 天海翼精品一区二区三区| 精品久久一区| 视频一区视频二区中文| 麻豆精品视频在线| 一区三区视频| 麻豆免费精品视频| 红桃视频亚洲| 国语对白精品一区二区| 免费看的黄色欧美网站| 久久影院资源站| 老牛国产精品一区的观看方式| 国产精品亚洲综合在线观看| 激情欧美日韩一区| 日韩高清国产一区在线| 精品捆绑调教一区二区三区| 日韩高清电影一区| 久久精品国产99久久| 欧美精品国产| 精品在线91| 国产一区一一区高清不卡| 在线看片日韩| 999久久久精品国产| 国产精品白丝久久av网站| 国产一区成人| 午夜精品久久久久久久久久蜜桃| 日韩毛片网站| 国产精品88久久久久久| 亚洲最新av| 精品一区毛片| caoporn视频在线| 日韩va欧美va亚洲va久久| 亚洲精品97| 国产白浆在线免费观看| 国产欧美一区| 亚洲精品综合| 亚洲成人一区| 欧美不卡高清一区二区三区| 国产精品jk白丝蜜臀av小说| 综合国产在线| 激情婷婷综合| 九九精品调教| 久久精品国产免费| 欧美一区免费| 亚洲理论在线| 欧美资源在线| 国产91精品对白在线播放| 欧美亚洲人成在线| 亚洲一级大片| 香蕉成人久久| 亚洲午夜91| 999国产精品永久免费视频app| 麻豆国产欧美日韩综合精品二区| 老司机精品久久| 国产农村妇女精品一区二区| 久久精品国语| 在线一区视频观看| 亚洲最新无码中文字幕久久| 精品国产亚洲一区二区三区在线| 91精品在线免费视频| 亚洲区欧美区| 久久午夜精品| 亚洲自拍另类| 久久国产精品久久w女人spa| 久久福利影视| 三级在线观看一区二区| 亚洲激情婷婷| 黄色av一区| 香蕉成人久久| 亚洲欧洲一区二区天堂久久| 五月天综合网站| 亚洲午夜一级| 99精品视频精品精品视频| 在线中文字幕播放| 精品捆绑调教一区二区三区 | 精品资源在线| 日韩精品影视| 免费观看久久av| 蜜臀久久久久久久| 日韩国产欧美三级| 国产精品任我爽爆在线播放 | 亚洲精品一区二区在线看| 久久不射中文字幕|