【发布时间】:2019-01-31 10:09:57
【问题描述】:
我有这样的课:
public class Fields implements java.io.Serializable{
public short ID;
public int SSN;
public long Number;
}
我有一个十六进制字符串,其值如下,每 2 个字符代表一个字节:
String str="1000180018000540AC80D6487653E5000100D40B7900D4C3FFF2FAFF8985";
现在我想在这样的模式中将此字符串转换为上述类对象:
//ID has short type so we need 2 bytes
ID=4096; //(decimal value of 1000)
//SSN has integer type so we need 4 bytes
SSN=402659328; //(decimal value of 18001800)
//Number has long type so we need 8 bytes
Number=378492038049986131; //(decimal value of 0540AC80D6487653)
这种转换可以很容易地用<reinterpret_cast> 在c++ 中实现,但正如Is there cast in Java similar to in C++ 问题所说,我可以用java 中的序列化来实现它。我认为当我们首先将类对象序列化为字节数组时可以使用序列化,其次我们可以将获得的字节反序列化为原始类对象,这与我的建议有点不同,因为我有一个字符串(比如字节),我想反序列化它。那我该怎么做呢?
【问题讨论】:
-
序列化对你没有帮助。它具有非常特定的格式,与您的格式不匹配。您必须手动解析字符串。
-
@talex 但 C++ 很容易用
<reinterpret_cast>做到这一点。那么java中没有像<reinterpret_cast>这样的方法吗?因为速度对我来说很重要,使用高速率字符串数据手动解析将是一个瓶颈! -
否
<reinterpret_cast>不会轻易做到。它甚至不会工作。 "1000" 是 4 个 ASCII 字节,0x31, 0x30, 0x30, 0x30,C++ 不会神奇地将其转换为 2 个字节 0x10, 0x00。 -
@ahmadimortezaali 如果你想使用
<reinterpret_cast>,你必须使用c++:) Java 没有类似的东西。
标签: java arrays serialization deserialization hexdump