Looking for erlang Answers? Try Ask4KnowledgeBase
Looking for erlang Keywords? Try Ask4Keywords

Erlang Languageアイリストス


前書き

Erlang文字列は整数のリストですが、 "iolist"は要素が整数、バイナリ、または他のアイオリストのリストです(例: ["foo", $b, $a, $r, <<"baz">>] 。そのアイリストは文字列"foobarbaz"表します。

iolist_to_binary/1を使ってiolistをバイナリに変換することはできますが、 file:write_file/2gen_tcp:send/2などのErlangライブラリ関数は、 gen_tcp:send/2と文字列とバイナリを受け付けるので、しばしば必要はありません。

構文

  • iolist():: maybe_improper_list(byte()| binary()| iolist()、binary()|)

備考

アイリストは何ですか?

これはバイナリです。または、0から255までの整数を含むリスト。あるいは、これらの2つのもののいずれかを含む任意のネストされたリスト。

原著

文字列やバイナリを連結するときにコピーを避けるために、深く入れ子になった整数とバイナリのリストを使用してIOデータを表現する。

大量のデータを結合する場合でも効率的です。たとえば、バイナリ構文<<B1/binary, B2/binary>>を使用して2つの50キロバイトのバイナリを結合するには、通常、新しい100kbバイナリに両方を再割り当てする必要があります。 IOリスト[B1, B2]を使用すると、リスト(この場合は3語[B1, B2]のみが割り当てられます。リストは要素ごとに1つの単語と別の単語を使用します(詳細はこちらを参照)。

++演算子を使用すると、新しい2つの要素リストではなく、全く新しいリストが作成されます。要素を最後まで追加するためにリストを再作成すると、リストが長い場合に高価になる可能性があります。

バイナリデータが小さい場合は、バイナリを追加するよりもIOリストを割り当てることができます。バイナリデータが小さいか大きい場合は、IOリストの一貫したコストを受け入れる方がよい場合があります。

追加バイナリは、 ここで説明するように最適化されていることに注意してください 。要するに、バイナリには余分なスペースが割り当てられます。空き領域に収まる別のバイナリが追加された場合、これは満たされます。これは、すべてのバイナリの追加が両方のバイナリの完全なコピーを引き起こすわけではないことを意味します。

アイリストス 関連する例