例如,我通过 jedis 将元组 T = {k1, v1, k2, v2} 保存到 redis:
eredis:q(Conn, ["SET", <<"mykey">>, term_to_binary(T)]).
我正在尝试使用下面的代码来阅读这个 erlang 术语:
Jedis j = Redis.pool.getResource();
byte[] t = j.get("mykey").getBytes();
OtpInputStream ois = new OtpInputStream(t);
System.out.println(OtpErlangObject.decode(ois));
错误是:com.ericsson.otp.erlang.OtpErlangDecodeException:未知数据类型:239。
那么我怎样才能正确地得到 erlang 术语呢?
二郎端:
term_to_binary({k1, v1, k2, v2})。
<<131,104,4,100,0,2,107,49,100,0,2,118,49,100,0,2,107,50, 100,0,2,118,50>>
Java端:
j.get("mykey").getBytes():
-17 -65 -67 104 4 100 0 2 107 49 100 0 2 118 49 100 0 2 107 50 100 0 2 118 50。
似乎只有前 3 个字节不同。所以我把它们改成byte(131),然后就可以用System.out.println(OtpErlangObject.decode(ois))正确打印了。
但是当术语更复杂时,例如对于内部带有列表的记录,它就不起作用了。因为其他一些字符不仅会出现在数据的开头,还会出现在数据的末尾和中间。
为什么我保存的数据与我得到的不同?