あなたがリストを作成し、このようなlist_to_binary
を呼び出すことなく、単一のバイトからバイナリを作成することができます:あなたはまた、単一で上記と同じロジックを行うためにここにバイナリ内包表記を使用することができます
my_binary_to_list(<<H,T/binary>>) ->
[<<H>>|my_binary_to_list(T)];
ライン:
1> [<<X>> || <<X>> <= <<"ABC">>].
[<<"A">>,<<"B">>,<<"C">>]
あなたが直接(これはしかし、おそらく上記よりも高速ではありません)サイズ1のバイナリを抽出することができます。
編集:クイックベンチtimer:tc/1
を使用するクイックベンチは、第1のコードに比べて約半分の時間で第2のコードを実行しますが、パフォーマンスの理由からどちらかを使用する前にベンチマークを行う必要があります。おそらく、2番目のサブバイナリを作成して大きなバイナリを共有しているのでしょうか?
1> Bin = binary:copy(<<"?">>, 1000000).
<<"????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"...>>
2> timer:tc(fun() -> [<<X>> || <<X>> <= Bin] end).
{14345634,
[<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<...>>|...]}
3> timer:tc(fun() -> [X || <<X:1/binary>> <= Bin] end).
{7374003,
[<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<...>>|...]}
hmmmこれは私のベンチマークでも速いと思われます。ありがとうございます! – Tommy