ここでは android において、base64エンコードされた文字列を TCP/IP で受信して、base64デコードで復元したデータをファイルに出力するサンプルコードを掲載しています。
スポンサーリンク
base64デコードしてファイルに出力する
TCP/IP で受信した文字列をbase64デコードしてファイルに出力するサンプルコードです。詳細はサンプル中のコメントを参照ください。
// TCP受信スレッド
new Thread(new Runnable() {
@Override
public void run() {
try {
// TCPでポート番号21111で待ち受け(バインド+リッスン)
ServerSocket tcp = new ServerSocket(21111);
// アクセプト
Socket sock = tcp.accept();
String message;
StringBuilder messageBuilder = new StringBuilder();
// 受信データを文字列としてすべて読み込み
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
while ((message = in.readLine()) != null){
messageBuilder.append(message);
}
// 切断
sock.close();
// 待ち受け終了
tcp.close();
// 受信した文字列をbase64デコード
byte[] decodedByte = Base64.decode(messageBuilder.toString(), 0);
// Bitmap形に変換する場合
//Bitmap bmp = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
// 外部ストレージのピクチャディレクトリに保存する
/*
* AndroidManifest.xml で次の通り外部記憶域へのファイル出力を許可する
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
*/
String fpath = Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_PICTURES + "/ok.png";
// ファイルにbase64デコードしたバイト配列を書き込み
FileOutputStream fos = new FileOutputStream(fpath);
fos.write(decodedByte, 0, decodedByte.length);
// ディスク書き込み+クローズ
fos.flush();
fos.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}).start();
送信側のサンプルは C# ですが、以下のリンクから確認できます。よろしければどーぞ。
[C#] 画像ファイルをbase64エンコードしてTCP/IPで送信する(Convert.ToBase64String)