茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729779 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
PIMG_00362.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [轉貼]Java 如何進行 Base64 的編碼(Encode)與解碼(Decode)

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15773
[轉貼]Java 如何進行 Base64 的編碼(Encode)與解碼(Decode)

Java如何進行Base64的編碼(Encode)與解碼(Decode)?

Base64是一種能將任意Binary資料用64種字元組合成字串的方法,而這個Binary資料和字串資料彼此之間是可以互相轉換的,十分方便。在實際應用上,Base64除了能將Binary資料可視化之外,也常用來表示資料加密過後的內容。如果要使用Java程式語言來實作Base64的編碼與解碼功能,可以參考本篇文章的作法。

Java上的Base64

早期作法

早期在Java上做Base64的編碼與解碼,會使用到JDK裡sun.misc套件下的BASE64Encoder和BASE64Decoder這兩個類別,用法如下:


final BASE64Encoder encoder = new BASE64Encoder();
final BASE64Decoder decoder = new BASE64Decoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = encoder.encode(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

從以上程式可以發現,在Java用Base64一點都不難,不用幾行程式碼就解決了!只是這個sun.misc套件所提供的Base64功能,編碼和解碼的效率並不太好,而且在以後的Java版本可能就不被支援了,完全不建議使用。

Apache Commons Codec作法

Apache Commons Codec有提供Base64的編碼與解碼功能,會使用到org.apache.commons.codec.binary套件下的Base64類別,用法如下:


final Base64 base64 = new Base64();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = base64.encodeToString(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(base64.decode(encodedText), "UTF-8"));

以上的程式碼看起來又比早期用sun.misc套件還要更精簡,效能實際執行起來也快了不少。缺點是需要引用Apache Commons Codec,很麻煩。

Java 8之後的作法

Java 8的java.util套件中,新增了Base64的類別,可以用來處理Base64的編碼與解碼,用法如下:


final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//編碼
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解碼
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));

與sun.misc套件和Apache Commons Codec所提供的Base64編解碼器來比較的話,Java 8提供的Base64擁有更好的效能。實際測試編碼與解碼速度的話,Java 8提供的Base64,要比sun.misc套件提供的還要快至少11倍,比Apache Commons Codec提供的還要快至少3倍。因此在Java上若要使用Base64,這個Java 8底下的java.util套件所提供的Base64類別絕對是首選!

為了使這個效能良好的Base64類別也能夠適用其他的Java版本,甚至是在Android SDK上使用,筆者將其從Java 8的原始碼中抽取出來,並稍微作點修改,並包含在MagicCrypt中,可以參考這篇文章來使用MagicCrypt:

https://magiclen.org/aes/


原文出處:Java如何進行Base64的編碼(Encode)與解碼(Decode)? | MagicLen
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15773
[轉貼]Java8 Base64

Java8 Base64

使用 Java8,Base64終於得到了在Java整合。 Java8現在有內置編碼器和解碼器的Base64編碼。在Java8中,我們可以使用三種類型的Base64編碼。

  • 簡單 - 輸出映射設置字符在A-ZA-Z0-9+/。編碼器不添加任何換行輸出和解碼器拒絕在A-Za-z0-9+/以外的任何字符。

  • URL - 輸出映射設置字符在A-Za-z0-9+_。輸出URL和文件名安全。

  • MIME - 輸出映射到MIME友好的格式。輸出表示在每次不超過76個字符行和使用'\r'後跟一個換行符'\n'回車作為行分隔符。無行隔板的存在是為了使編碼的結束輸出。

Nested 類

S.N. Nested 類 & 描述
1 這個類實現了一個解碼器使用的Base64編碼方案解碼字節的數據,在RFC4648和RFC2045規定。
2 這個類實現一個編碼器使用的Base64編碼方案編碼字節數據在RFC4648和RFC2045規定。

方法


S.N. 方法名稱 & 描述
1 返回Base64.Decoder解碼使用基本型base64編碼方案。
2 返回Base64.Encoder編碼使用的基本型base64編碼方案。
3 返回Base64.Decoder解碼使用MIME類型的base64解碼方案。
4 返回Base64.Encoder編碼使用MIME類型base64編碼方案。
5 返回Base64.Encoder編碼使用指定的行長度和線分隔的MIME類型base64編碼方案。
6 返回Base64.Decoder解碼使用URL和文件名安全型base64編碼方案。
7 返回Base64.Decoder解碼使用URL和文件名安全型base64編碼方案。...

方法繼承

這個類從以下類繼承的方法:

  • java.lang.Object

Base64 例子

選擇使用任何編輯器創建以下java程序在 C:/> JAVA

Java8Tester.java

import java.util.Base64;
import java.util.UUID;
import java.io.UnsupportedEncodingException;
public class HelloWorld {
public static void main(String args[]){
try {
// Encode using basic encoder
String base64encodedString = Base64.getEncoder().encodeToString("YiiBai?java8".getBytes("utf-8"));
System.out.println("Base64 Encoded String (Basic) :" + base64encodedString);
// Decode
byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString);
System.out.println("Original String: "+new String(base64decodedBytes, "utf-8"));
base64encodedString = Base64.getUrlEncoder().encodeToString("YiiBai?java8".getBytes("utf-8"));
System.out.println("Base64 Encoded String (URL) :" + base64encodedString);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < 10; ++i) {
stringBuilder.append(UUID.randomUUID().toString());
}
byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8");
String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes);
System.out.println("Base64 Encoded String (MIME) :"+mimeEncodedString);
}catch(UnsupportedEncodingException e){
System.out.println("Error :"+e.getMessage());
}
}
}

驗證結果


使用javac編譯如下編譯類



C:\JAVA>javac Java8Tester.java

現在運行Java8Tester看到的結果



C:\JAVA>java Java8Tester

看到結果



Base64 Encoded String (Basic) :VHV0b3JpYWxzUG9pbnQ/amF2YTg=
Original String: YiiBai?java8
Base64 Encoded String (URL) :VHV0b3JpYWxzUG9pbnQ_amF2YTg=
Base64 Encoded String (MIME) :ZWJjY2YzZWUtYmUwZC00Yjg1LTlkYjUtNWUyMzBlNWI
4ZGQ4ZjE1NGJmMjEtNTdkNi00YzM1LTg4
MzYtNDZlYzNhZDM2NTdkZmQzY2RiNzMtMTU1OC00ZjBmLWFmZGQtM2YyZWU3MDYzZjQwNzVhY
WQ0
ODctZWEyZS00YzM2LWEyZmUtOGVkMmNjMGNmZGM3MTg5YWUyZGQtMzg4MS00M2NkLWI2NDEtZ
jNh
Zjk2OGIxZDU2YzkzODZlYTUtNjljNC00ZmIyLTkzYTQtMzVlOTFlNjdlY2E0MDcwNWExMWItM
mE4
Yy00OTljLTg2NmItMjE3ZTZmMmIyY2NiNzI2MjAwZWQtMjI0NC00YzJhLWJiMGItOTczMDJkM
zIx
NGFkY2QyZmVhODItNmUyOS00MWNjLWFlODItNzdmNzRhYmQ4NGU5ZGQ3ZjY3NzktZjgwYi00M
zlk
LTlmNDgtOTNlNTIwYzIzZDcy




原文出處:Java8 Base64 - Java8基礎教程
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15773
[轉貼]Java Base64 編碼 / 解碼
Java Base64 編碼 / 解碼
import java.util.Base64;

Base64.Decoder decoder = Base64.getDecoder();
Base64.Encoder encoder = Base64.getEncoder();
String text = "蘿莉萌";
byte[] textByte = text.getBytes("UTF-8");

//編碼
String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);

//解碼
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));


原文出處:Java Base64 編碼 / 解碼 @ 彥霖 實驗筆記 :: 痞客邦 ::
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|