以下の処理を行っています。
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
No.1ベストアンサー
- 回答日時:
> 1.クライアント(Flex/ActionScript)でビットマップ画像をバイト配列化して、Base64エンコードして、文字列生成
何かスタンドアローンのツールを使って、この文字列からをデコードしたら、元のファイルになりますか?
> 3.サーバー(Tomcat/Java)側で文字列取得
サーバーで受信した文字列は、クライアントから送信された文字列と等しいですか?
文字コードが違っていて化けたりしませんか?
> 4.文字列をBase64デコードしてバイト配列化
1で生成した文字列を、通信を介在しないで、直接CommonsのBase64クラスでデコードしたら、
元のファイルに復元されますか?
> 5.バイト配列をファイルに書き込む(保存)
バイナリで保存してますか?文字列として保存してしまって、文字コードの影響を受けていませんか?
satomi3951さま、ご回答をありがとうございます。
おかげさまで解決しました。
それぞれ確認してみたところ、、、
> 3.サーバー(Tomcat/Java)側で文字列取得
の部分でクライアントからサーバーに送られた文字列が違っていました。(具体的には"+"が空白に変わっていた)
長さしかチェックしてませんでした・・・。
空白を+に戻してみたところ、期待する結果を得られました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Excel(エクセル) 配列操作について 5 2023/04/18 07:27
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
この警告はどうすれば?
-
ランダムでのboolean値の与え方
-
配列の中に複数存在する数がい...
-
Java配列の問題を教えてくださ...
-
『args[]』とは?
-
配列で、値の入っている要素数...
-
[Ljava.lang.Stringってなんですか
-
Java です 途中は省いてますが ...
-
2次元配列のコピー
-
CSVファイルの、列だけ取得したい
-
[JAVA]配列のカウントに関して
-
String型をbyte型へ
-
0から99の数字をランダムに...
-
java 大文字と小文字を入れ替える
-
動的配列確保
-
MAPの配列・・・???!!!
-
javamailで複数人にメールを送...
-
多次元配列への数値の代入。
-
【C#】ハッシュテーブル(連想...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
C#で動的配列Listの中身をListB...
-
javaで大容量テキストファイル...
-
C言語でunsigned char配列を連...
-
n番目に大きな値を探索する
-
JavaのBase64デコードで正しく...
-
配列で、値の入っている要素数...
-
Javaで文字を漢字であるか否か...
-
配列の中に複数存在する数がい...
-
データベースから取得したデー...
-
【C#】ハッシュテーブル(連想...
-
Javaで文字と数字が混ざったも...
-
cloneメソッドについて (java)
-
ArrayListからBean配列に値をセ...
-
配列をセッションに割り当てた後で
-
int配列をbyte配列に変換
-
セッションを使ったint型の値の...
-
javamailで複数人にメールを送...
-
【Ajax通信&Java】配列の受け取...
おすすめ情報