是否可以将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,但是每当他调用这个方法时,自动装箱就已经为他做了。