JDK 5に関するこの質問 によると、JDK 5で提供される実装はありませんが、JDK 6にはSun.misc.Base64Decoder
。
私の知る限りでは、このクラスはJDKに付属しておらず、他の同様のクラスを見つけることができませんでした。
では、JDK6の状況はどうですか?
私はCommonsやJBossの実装のような多数の実装を知っていますが、制限付きのサードパーティlibポリシーを持っているので、ホイールの再発明を回避しようとしています。
いいえ、状況はJava 5とJava 6.の間で変わりませんでした。
残念ながら、Java SEプラットフォームには、公式のBase64実装はありません。 @bestsssは、isが実際にJava SE 6(詳細については彼の答え)。
Sun JDKにはこのクラス(Sun.misc.Base64Decoder
)ですが、指定されておらず、 は使用しないでください (特に、他の実装やバージョンに存在する必要がないため)。
サードパーティのライブラリを絶対に避ける必要がある場合( Apache Commons Codec は Base64実装の伝統的なプロバイダーです )、それからあなたはBSD(または同様の)ライセンスバージョンをプロジェクトにコピーする場合があります。 パブリックドメインの実装 があり、ライセンスに関しては、それはそれが得るのと同じくらい簡単です。
Javaには公式の(_Sun.misc
_以外の)実装がありますが、誰もが想定している場所ではありません。
_Java.util.prefs.AbstractPreferences
_は、そうするために必要なメソッドを持つものです。 put
メソッドをオーバーライドする必要があります。
もう1つは、はるかに使いやすくなっています。
_javax.xml.bind.DatatypeConverter
_ 対象となる2つのメソッドがあります。
public static byte[] parseBase64Binary( String lexicalXSDBase64Binary )
public static String printBase64Binary( byte[] val )
abstractPreferencesのbase64の性質を明確化:Java.util.prefs.Preferences
/** *指定されたバイト配列を表す文字列を、この設定ノードの *指定されたキーに関連付けます。関連する文字列は *です Base64 RFC 2045のセクション6.8で定義されているバイト配列のエンコード、 * 1つのマイナーな変更:文字列は文字のみで構成されます * Base64アルファベット;改行 *文字は含まれません。バイト配列の最大長は[____。] * MAX_VALUE_LENGTHの4分の3に制限されているため、Base64エンコードされた文字列の長さ *はMAX_VALUE_LENGTH。 を超えないことに注意してください。*このメソッド * {@link #getByteArray}。 */ と組み合わせて使用するためのものです。public abstract void putByteArray(String key、byte [] value);
Joachim Sauerが以前のコメントで言ったように、JDK1.6はすでにそれ自体のBase64実装(Sun.misc。*)にバンドルされています。以下に例を示します。
String toEncode = "Encoding and Decoding in Base64 Test";
//Encoding in b64
String encoded = new BASE64Encoder().encode(toEncode.getBytes());
System.out.println(encoded);
//Decoding in b64
byte[] decodeResult = new BASE64Decoder().decodeBuffer(encoded);
System.out.println(new String(decodeResult));
私はbyte[] decodedValue = DatatypeConverter.parseBase64Binary(value);
を使用しました
このウェブサイトはよく説明しています: https://www.rgagnon.com/javadetails/Java-0598.html
それからの抜粋:
public static String encode(String value) throws Exception {
return DatatypeConverter.printBase64Binary
(value.getBytes(StandardCharsets.UTF_8)); // use "utf-8" if Java 6
}
public static String decode(String value) throws Exception {
byte[] decodedValue = DatatypeConverter.parseBase64Binary(value);
return new String(decodedValue, StandardCharsets.UTF_8); // use "utf-8" if Java 6
}