У меня есть BERT , переданный Эрлангу через строку запроса.Я читаю его через gen_tcp с опцией http_bin, поэтому он приходит примерно так << "131,104,1,100,0,2,104,105" >>.Что только почти правильно, потому что я хочу декодировать его с помощью binary_to_term / 2.Но binary_to_term / 2 хочет двоичный двоичный файл, а не строковый двоичный файл (он хочет << 131,104,1,100,0,2,104,105 >> не << "131,104,1,100,0,2,104,105" >>).
Iможно разобрать его в нужную форму следующим образом.
parse(Source) ->
Bins = binary:split(Source, <<",">>, [global]),
parse(Bins, []).
parse([H | T], Acc) ->
parse(T, [list_to_integer(binary_to_list(H)) | Acc]);
parse([], Acc) ->
list_to_binary(lists:reverse(Acc)).
Но это кажется запутанным и медленнее, чем я ожидал (~ 5k / sec с каждым из 200 байтов).Также придумали что-то, основанное на io_lib: fread / 2, но это было не намного лучше и все еще выглядит неловко.
Есть ли где-нибудь BIF или NIF, которые могли бы сделать это?
Если нет, то есть ли лучший способ сделать это, чтобы ускорить его?