你的问题不是很清楚你到底想要什么,但是......
您可以提出一些自定义方案来执行此操作,例如数组的第一个字节指示什么类型,其余字节是实际数据。然后,您需要编写代码将 byte[1] 到 byte[length-1] 转换为给定的类型。对我来说,这似乎是很多工作。
我可能会尝试使用对象序列化。它基本上可以完成您在此处询问的内容,无需任何自定义代码。
public static void main(String[] args) throws Exception {
String strValue = "hello";
int myInt = 3;
long myLong = 45677;
short myShort = 1;
double myFloat = 4.5;
serializeThenDeserialize(strValue);
serializeThenDeserialize(myInt);
serializeThenDeserialize(myLong);
serializeThenDeserialize(myShort);
serializeThenDeserialize(myFloat);
}
private static void serializeThenDeserialize(Object value) throws Exception {
System.out.println("Input Type is " + value.getClass() + " with value '" + value + "'");
ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteArrayStream);
out.writeObject(value);
out.close();
byte[] objectAsBytes = byteArrayStream.toByteArray();
// Persist here..
// Now lets deserialize the byte array
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(objectAsBytes));
Object deserializedValue = in.readObject();
in.close();
System.out.println("Deserialized Type is " + deserializedValue.getClass() + " with Value '" + deserializedValue + "'");
System.out.println();
}
运行它时,它就像我们想要的那样。返回数据并维护类型。
Input Type is class java.lang.String with value 'hello'
Deserialized Type is class java.lang.String with Value 'hello'
Input Type is class java.lang.Integer with value '3'
Deserialized Type is class java.lang.Integer with Value '3'
Input Type is class java.lang.Long with value '45677'
Deserialized Type is class java.lang.Long with Value '45677'
Input Type is class java.lang.Short with value '1'
Deserialized Type is class java.lang.Short with Value '1'
Input Type is class java.lang.Double with value '4.5'
Deserialized Type is class java.lang.Double with Value '4.5'
这样做的好处是它适用于所有 Java 对象。不好的是,Java 对象序列化可能会随着您存储的对象的发展而变得有点麻烦(即,您删除方法、字段、使用不同的 JDK 编译等)。如果你坚持原语,你应该没有问题。如果您序列化自己的对象,您应该在此处阅读有关兼容和不兼容更改的更多信息。