是否可以将java原语和引用对象类型转换为与用户定义对象相同的字节数组?
我想编写一个类来序列化代码中的所有对象(原语、引用和用户定义)。对于用户定义的对象,我编写了以下代码:是否可以将java原语和引用对象类型转换为与用户定义对象相同的字节数组?,java,arrays,serialization,primitive-types,Java,Arrays,Serialization,Primitive Types,我想编写一个类来序列化代码中的所有对象(原语、引用和用户定义)。对于用户定义的对象,我编写了以下代码: static void serialize(Object object, OutputStream outputStream) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput objectOutput = null; try { objectOutput =
static void serialize(Object object, OutputStream outputStream) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput objectOutput = null;
try {
objectOutput = new ObjectOutputStream(bos);
objectOutput.writeObject(object);
objectOutput.flush();
byte[] bytes = bos.toByteArray();
outputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
bos.close();
} catch (IOException ex) {
// ignore close exception
}
}
}
是否可以对基本对象和引用对象类型重复使用相同的方法?我应该在该方法中更改什么?由于您实际上没有对
ID
类型执行任何操作,您可以将其简化为对象
。另外,如果您碰巧使用了Java7,则可以使用trytwithresources
语句。FileNotFoundException
似乎也没有被使用。因此,serialize
方法的最终版本如下所示:
static void serialize(Object o, OutputStream outputStream){
try(ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput objectOutput = new ObjectOutputStream(bos)){
objectOutput.writeObject(o);
objectOutput.flush();
byte[] bytes = bos.toByteArray();
outputStream.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
通过这种方式,您可以使用希望序列化的对象调用此方法:
// With String
serialize("Hello World!", out);
// With int
serialize(2547, out);
// with byte-array
serialize(new byte[]{1,3,5,6}, out);
// with userdefined object
serialize(new MyObject(), out);
是否可以对基元[类型]重复使用相同的方法
对
和引用对象类型
你已经这样做了
我应该改变什么方法
没什么。随便你怎么说都行。自动装箱会帮你处理的
为什么要从一个无法抛出FileNotFoundException的方法中声明
抛出FileNotFoundException
,这是另一个谜。字符串
不存在。您可能是说String
不是基本类型枚举也不是基本类型。您可能想从阅读原语类型到底是什么开始?基本类型,例如double?或引用类型,如字符串、双精度、枚举?换言之,你想问什么或想达到什么目的还真的不清楚。关于你问题的标题,你能告诉我你如何将布尔值真值转换成字节数组字节[]
。@Lino是的,我指的是字符串,但我认为它是原始的,我想要一种方法来转换对象字节数组,而不管它们的类型声明如何。你可以添加这样的一点,如果OP想对原语如int
或double
执行相同的操作,他必须首先将它们转换为相应的对象Integer
或double
@vincrichaud good point,但是每当他调用这个方法时,自动装箱就已经为他做了。