駐日アンゴラ共和国大使館特命全どの機能向上のためのJavaのStringをbyte[]ください。)
-
06-07-2019 - |
質問
私が継承された曲のコードを集約する文字列->byte[]の変換およびその逆の一部の国内serialisationます。基本的には、Javaオブジェクトからの変換はその構成部分文字列から変換されbyte[].たバイト配列はそのJNIはC++のコードreconstitutesのbyte[]はC++std::文字列およびそれらをブートストラップC++オブジェクトミラーは、Javaオブジェクト。あと少しでも高いレベルにどのようなこの作品のコードを作の通信の作品のようにこの両方のC++>Javaの移行は、ミラーイメージは、Java->C++遷移します。
このコードの実際の変換文字列をbyte[]は意外との撮影中に体調不良を訴プロファイラとして燃焼の多くのCPUを搭載しています。当たり前にあるデータ転送をしていないことが予想外のボトルネックです。
の基本的な概要のコードは以下のとおりです:
public void convertToByteArray(String convert_me, ByteArrayOutputStream stream)
{
stream.write(convert_me.getBytes());
}
あと少しの機能がないんです。上記の機能が呼び出されすべての属性を文字/文字列化されたオブジェクトの後、すべての質問:あなたの母親の旧姓はByteArrayOutputStreamをByteArrayOutputStreamが変換されbyte[].の上下によりプロファイラー向けのバージョンの採取 convert_me.getBytes()
電話によると90%以上の時間この機能は、getBytes()を呼び出す.
があるので、利便性向上のための性能getBytes()を呼び出しはしおりを付けることができるような方達と同じださい。)
数オブジェクトに切り替えが非常に大きい。のプロファイリングを走るだけで小さいサブセットの生産データの見かけのようなも10百万円のプラス電話への変換機能です。
こち近のプロジェクトの生産が回避策なきのこの時期には:
- 書き換えのserialisationインターフェースでパス文字列オブジェクトはJNI。これは明らかでいう状況を改善する上で必要と主にリエンジニアリングのserialisation。えているという事実を考えると私たちが発展していくためにUAT今週初にでもこのような複雑に変化します。ではないように気をつけたいですねtodoの次にリリースでは、まだうまく管理できなければならない、回避策はそれまでであるが、これまでのところ、このコードは、長い間使われてとても折れにくくする。なかったから。
- の変更のJVM(現1.5)にもないオプションになります。残念ながらこれがデフォルトJVMに設置されているクライアントの機械への更新1.6(ば早くこの場合は残念ながらできません。お持ちの方ならどなたでも働いて大きな組織にも理解しょうか---
- このほかにも、い言葉を聞かせてくれました走へのメモリ制約なしのキャッシュ以上の大文字列とバイト配列表現を可能なエレガントな解決方法が原因により問題が解決
解決
私の推測の問題が生じる可能性がありするには、Javaの文字列はUTF-16形式るバイトはキャラクター;なので getBytes()
となりうるかどうかをチの作品をUTF-16の要素を一つまたはバイトは、現在の文字セットです。
ただしてみました CharsetEncoder こんに制御文字列に符号化できるかをスキップオーバーヘッドのデフォルトの getBytes
実装されます。
或いは、また明示的に指定の文字セットを getBytes
, 使 US-ASCII としての文字セット?
他のヒント
いくつかのオプション:
であれば同じ文字列に変換すすべての時、キャッシュの結果、WeakHashMap.
また、というものがgetBytes()メソッドのソースはご利用の場合インストールするSDK)を見ようです。
問題は、すべてのメソッドJavaでは、現在でもメモリを割り当てをUTF-8で生産。車のエンコードperformantんを書く必要があるカスタムコードと再利用のbyte[]バッファです。Colferを生成でき、コードはただ単にコピーする。