、のは、私は3バイトJavaは:例えば
byte a[] = {1,2,3,0,1,2,3,0,0,0,0,4};
byte r[] = magic(a);
System.out.println(r);
結果
{1,2,3,0,1,2,3,4}
Iよりも長い0のすべての連続セグメントの配列から削除したいとしましょうバイト配列からゼロのcontiniousセグメントを削除しますJavaでは正規表現のようにしたいが、Stringではなくバイト配列で処理する。
私は組み込みを助けることができる(または良いサードパーティツールがありますか)、またはゼロから作業する必要がありますか?
文字列はUTF-16なので、前後の変換は良い考えではありませんか?少なくとも、それは無駄なオーバーヘッド...多くの?
ご利用の場合のパフォーマンスとメモリ使用量がどのように重要なのですか?一般に、RAMは安価であり、CPUは高速です。あなたは実際にボトルネックを見つけましたか、効率を心配するケースですか? 8ビットエンコーディングを使用してbyte []をStringに変換して、簡単に試してみてください。正規表現を行い、パフォーマンスをチェックしてください。結局のところ、ANSI環境で16ビットの文字列を使用する非効率なJava文字列が通常の使用にどのように影響するか心配する必要はありません。 –
高性能アプリケーションでは、ラムの使用よりもサイクルが心配です。 – Mike
ベンチマークの価値はまだあります。 Hotspot VMはホットスポットのコードをマシンコードに変換します。マシンコードは、32ビットのマシンワードに収まるため、8ビットデータと同じ速度で16ビットデータを処理します。たとえそれが遅すぎるとしても、それを見つけるのに多くの時間を費やすことはありません。 –