[android開発] TCPで受信した文字列をbase64デコードして画像ファイルに復元する(Base64.decode)

Pocket

ここでは 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)

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *