プロが教えるわが家の防犯対策術!

以下の処理を行っています。

1.クライアント(Flex/ActionScript)でビットマップ画像をバイト配列化して、Base64エンコードして、文字列生成
2.1で生成した文字列をサーバーに送付
3.サーバー(Tomcat/Java)側で文字列取得
4.文字列をBase64デコードしてバイト配列化
5.バイト配列をファイルに書き込む(保存)

保存した画像が正しく表示されない(PNGファイルとしては認識されている)ので、色々と調べたところ、以下の事象が発生しています。

(事象1)Apache CommonsのBase64デコーダーを使ってバイト配列化するとサイズが減る
例えば、クライアント側のバイト配列が 162104 の時、159768 に減ります。
(事象2)Sun.miscのBase64デコーダーを使ってバイト配列化するとサイズは同じだが微妙に内容が異なる)
例えば、不規則なのですが、だいたい10バイトに1ビットくらいの相違があります。以下は相違例です。
Client ⇒ Server
==============
7E→7F
F9→FD
E7→F7
9F→DF
BF→FF
E5→F5
==============
※添付ファイルにバイナリエディタで比較した画面を添付しました。

どこを調べたら良いでしょうか?
また提示が不足している情報があればご指摘ください。

[環境]
OS:WindowXP SP3、Eclipse、jdk1.6.0_24、Flash10.1
クライアント側:Flex SDK3.5 / PNGEncoderでバイト配列生成 / Base64EncoderでBase64文字列化(改行付与フラグはTrue/Falseとも試すも結果同じ)
サーバー側:Tomcat 1.6、Struts、Java

「JavaのBase64デコードで正しく復」の質問画像

A 回答 (1件)

> 1.クライアント(Flex/ActionScript)でビットマップ画像をバイト配列化して、Base64エンコードして、文字列生成


何かスタンドアローンのツールを使って、この文字列からをデコードしたら、元のファイルになりますか?

> 3.サーバー(Tomcat/Java)側で文字列取得
サーバーで受信した文字列は、クライアントから送信された文字列と等しいですか?
文字コードが違っていて化けたりしませんか?

> 4.文字列をBase64デコードしてバイト配列化
1で生成した文字列を、通信を介在しないで、直接CommonsのBase64クラスでデコードしたら、
元のファイルに復元されますか?

> 5.バイト配列をファイルに書き込む(保存)
バイナリで保存してますか?文字列として保存してしまって、文字コードの影響を受けていませんか?
    • good
    • 0
この回答へのお礼

satomi3951さま、ご回答をありがとうございます。
おかげさまで解決しました。

それぞれ確認してみたところ、、、

> 3.サーバー(Tomcat/Java)側で文字列取得
の部分でクライアントからサーバーに送られた文字列が違っていました。(具体的には"+"が空白に変わっていた)
長さしかチェックしてませんでした・・・。

空白を+に戻してみたところ、期待する結果を得られました。

お礼日時:2011/10/21 16:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!