Tag Archives: XML

AS3のShift_JISのXML読み込み問題

1
Filed under AS3, Flash
Tagged as , , ,

「AS3のShift_JISのXML読み込みにバグ」という問題でかなりハマったので、メモのためのエントリです。

Shift_JISのXML読み込みで問題発生

『AS3でShift_JISのXMLを読み込む』という話があった時点で、「え!?Shift_JIS?なんか怖いので、UTF-8にしてください」と野生の勘で言ったものの、根拠がなくて却下されていました。

で、開発終盤。
なぜだかうまく読み込めない、という問題が大きな問題となりつつあり、当初は通信ラグとかサーバ側がおかしいんじゃないのか?とかそういう感じで調査していたのですが、調べていくと、「AS3でShift_JISの大きなサイズのXMLを読み込むとうまく読み込めないことが発生する」というバグ情報にたどり着きました。

野生の勘は的中でした。
21世紀も1割過ぎたんだから、もう新規案件の通信時文字コードはUTF-8で統一しようよ、と心の底から思います。

Shift_JISのXMLを問題なく読み込む方法

さらに調べると、どうやら回避策があるということがわかり、具体的には下記のブログエントリを参考に回避することが出きました。

内容を説明すると、バイナリフォーマットで通信し、それをByteArray→UTF-8の解釈でStringに変換→XMLという流れで解釈してあげれば問題ない模様。

// ロード開始コード.
var _loader:URLLoader = new URLLoader();
_loader.dataForamt = URLLoaderDataFormat.BINARY; // ←ここが重要.
_loader.addEventListener( Event.COMPLETE, onLoadComplete );
_loader.load(new URLRequest( _path_to_load_ ));
// ロード完了後の処理.
var bytes:ByteArray = ByteArray( _loader.data ); // 型キャスト.
var xml:XML = new XML( byteData.readMultiByte( bytes.length, "shift-jis" ) );

この流れでうまく行くというのは、おそらく、自動でXMLに変換するときに文字コード判定がバグってしまう、ということなんだと思います。


[AD]

↓ヘッドフォン入出力の分岐用に欲しい。というか、ミキシングできるらしく試してみたい。

BELKIN マルチ イヤフォン スプリッター ROCKSTAR F8Z274

BELKIN マルチ イヤフォン スプリッター ROCKSTAR F8Z274

Amazon価格:¥ 1,518

カテゴリ:エレクトロニクス

発売日:2008-11-10


↓フタ付き小物入れ部分が魅力的だったりするUSBハブ。箱の中にも端子があったら最高だった。

huBox HB-029

huBox HB-029

Amazon価格:¥ 1,280

カテゴリ:Personal Computers

発売日:2010-03-01


AS3のXML処理最適化

0
Filed under AS3, Flash
Tagged as , , ,

XML処理の速度についていろいろな方法があるがどの方法がよいのか、を見極められないシーンが多い。

一度処理速度について調べておきたいと思っていて、とりあえず一つだけ調べたのでその結果をメモしておきます。

属性取得の速度

比較してみたのは属性取得の速度。
E4Xライブラリを使って属性にアクセスする場合、次のような3種類のコードになります。

1
2
3
4
var xml:XML = <data><value id="10">20</value></data>;
// var id = xml.@id; .. 方法1
// var id = xml.@["id"]; .. 方法2
// var id = xml.attribute( "id" ); .. 方法3

後述するコードを使用して、これらの違いを比べてみました。

結論

比較するために使用したコードは後述しますが、私の環境では平均して方法1が最も高速で、続いて方法2、方法3、という結果になりました。方法1は方法3よりも20%速く、方法2よりも5%速い、という結果になりました。

たまーに結果が入れ替わることもありますが、それらはおそらくキャッシュや別プロセスなどの問題だと思われます。

文字列処理がワンクッション入ると遅くなる、ということなのではないだろうか、と推測します。

このエントリの結論「E4Xが使える環境では属性データは@でアクセスすべし」

テストコード

以下にテストに使用したコードを載せておきます。
Read More »