1. ホーム
  2. java

[解決済み] JavaでBase64としてエンコードする

2022-03-15 21:44:03

質問

あるデータをJavaでBase64エンコードする必要があります。どうすればよいですか?Base64エンコーダを提供するクラスの名前は何ですか?


を使おうとしたのですが sun.misc.BASE64Encoder クラスがありますが、成功しません。私は、Java 7のコードで次の行を持っています。

wr.write(new sun.misc.BASE64Encoder().encode(buf));

Eclipseを使用しています。Eclipseはこの行をエラーとしてマークします。必要なライブラリーはインポートしました。

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

しかし、やはりどちらもエラーとして表示されます。私が見つけたのは 同様の投稿はこちら .

含めて提案された解決策として、Apache Commonsを使用しました。

import org.apache.commons.*;

からダウンロードしたJARファイルをインポートしてください。 http://commons.apache.org/codec/

しかし、問題はまだ存在します。Eclipseは、前に述べたようなエラーをまだ表示しています。どうしたらいいでしょうか?

解決方法は?

クラスのインポートを変更する必要があります。

import org.apache.commons.codec.binary.Base64;

そして、Base64クラスを使用するようにクラスを変更します。

以下はコード例です。

byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.decodeBase64(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

次に、次のように読みます。 なぜsun.*のパッケージを使ってはいけないのか? .


更新情報 (2016-12-16)

を使用することができるようになりました。 java.util.Base64 をJava 8で使用することができます。まず、通常通りインポートします。

import java.util.Base64;

次に、以下のようにBase64の静的メソッドを使用します。

byte[] encodedBytes = Base64.getEncoder().encode("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
System.out.println("decodedBytes " + new String(decodedBytes));

文字列を直接エンコードして、その結果をエンコードされた文字列として取得したい場合は、これを使うことができます。

String encodeBytes = Base64.getEncoder().encodeToString((userName + ":" + password).getBytes());

参照 Base64のJavaドキュメント をご覧ください。