电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

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

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

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

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

java.util.Base64

該類提供了一套靜態(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輸出,而且對MIME格式友好:每一行輸出不超過76個字符,而且每行以“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);

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

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

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

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

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

Base64編碼性能測試

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

首先來定義兩個接口

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

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

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的實現(xiàn)類

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實現(xiàn)Base64的代碼了,就不詳細(xì)列出。

主要測試手段是,生成100M的隨機數(shù),分成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 ); }

測試結(jié)果

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

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

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

總結(jié)

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 精密光学实验平台-红外粉末压片机模具-天津博君 | 广西正涛环保工程有限公司【官网】| 壹作文_中小学生优秀满分作文大全 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | 中宏网-今日新闻-财经新闻| Q361F全焊接球阀,200X减压稳压阀,ZJHP气动单座调节阀-上海戎钛 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 紧急切断阀_气动切断阀_不锈钢阀门_截止阀_球阀_蝶阀_闸阀-上海上兆阀门制造有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 智能气瓶柜(大型气瓶储存柜)百科| 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 暴风影音| 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 加盟店-品牌招商加盟-创业项目商机平台 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 交通信号灯生产厂家_红绿灯厂家_电子警察监控杆_标志杆厂家-沃霖电子科技 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 成人纸尿裤,成人尿不湿,成人护理垫-山东康舜日用品有限公司 | 压力变送器-上海武锐自动化设备有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 |