binary_to_term(Binary, Opts) -> term() | {term(), Used}
OTP R13B04
類型:
Binary = ext_binary()
Opt = safe | used
Opts = [Opt]
Used = integer() >= 1
與 binary_to_term/1
相同,但采用以下選項:
safe
-
從不受信任的來源接收二進製文件時,請使用此選項。
啟用後,它可以防止解碼可用於攻擊 Erlang 運行時的數據。如果接收到不安全數據,解碼將失敗並出現
badarg
錯誤。這可以防止直接創建新原子、間接創建新原子(因為它們嵌入到某些結構中,例如進程標識符、refs 和 funs)以及創建新的外部函數引用。這些資源都不會被垃圾回收,因此未經檢查的創建它們可能會耗盡可用內存。
> binary_to_term(<<131,100,0,5,"hello">>, [safe]). ** exception error: bad argument > hello. hello > binary_to_term(<<131,100,0,5,"hello">>, [safe]). hello
警告safe
選項確保 Erlang 運行時安全地處理數據,但不能保證數據對您的應用程序是安全的。您必須始終驗證來自不受信任來源的數據。如果二進製文件通過不受信任的來源存儲或傳輸,您還應該考慮對其進行加密簽名。 used
-
將返回值更改為
{Term, Used}
,其中Used
是從Binary
實際讀取的字節數。> Input = <<131,100,0,5,"hello","world">>. <<131,100,0,5,104,101,108,108,111,119,111,114,108,100>> > {Term, Used} = binary_to_term(Input, [used]). {hello, 9} > split_binary(Input, Used). {<<131,100,0,5,104,101,108,108,111>>, <<"world">>}
失敗:badarg
(如果指定了 safe
並且解碼了不安全數據)。
也可以看看term_to_binary/1
,
binary_to_term/1
, 和
list_to_existing_atom/1
.
相關用法
- erlang binary_to_term(Binary)用法及代碼示例
- erlang binary_to_atom用法及代碼示例
- erlang binary_to_float用法及代碼示例
- erlang binary_to_integer用法及代碼示例
- erlang binary_to_list用法及代碼示例
- erlang binary_to_atom(Binary, Encoding)用法及代碼示例
- erlang binary_to_float(Binary)用法及代碼示例
- erlang binary_to_integer(Binary)用法及代碼示例
- erlang binary_to_integer(Binary, Base)用法及代碼示例
- erlang binary_part用法及代碼示例
- erlang binary_part(Subject, PosLen)用法及代碼示例
- erlang bin_to_list(Subject, PosLen)用法及代碼示例
- erlang bit_size(Bitstring)用法及代碼示例
- erlang bitstring_to_list(Bitstring)用法及代碼示例
- erlang byte_size用法及代碼示例
- erlang basedir(PathType, Application, Opts)用法及代碼示例
- erlang basename(Filename)用法及代碼示例
- erlang basename(Filename, Ext)用法及代碼示例
- erlang byte_size(Bitstring)用法及代碼示例
- erlang sin用法及代碼示例
- erlang cos用法及代碼示例
- erlang tan用法及代碼示例
- erlang asin用法及代碼示例
- erlang acos用法及代碼示例
- erlang atan用法及代碼示例
注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 binary_to_term(Binary, Opts) -> term() | {term(), Used}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。