代码之家  ›  专栏  ›  技术社区  ›  Salem Masoud

是否可以将Java原语和引用对象类型转换为与用户定义的对象相同的字节数组?

  •  -1
  • Salem Masoud  · 技术社区  · 6 年前

    我想编写一个类来序列化代码中的所有对象(原语、引用和用户定义的对象)。对于用户定义的对象,我编写了以下代码:

    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
            }
        }
    }
    

    是否可以对基元和引用对象类型重用同一方法?我应该在该方法中更改什么?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Lino    6 年前

    从事实上你没有做任何事情 ID 你可以把它简化成 Object . 另外,如果您碰巧使用java7,您可以使用 try-with-resources 语句。这个 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);
    
        2
  •  -1
  •   user207421    6 年前

    是否可以对基元[类型]重用相同的方法

    对。

    和引用对象类型

    你已经这么做了。

    我应该改变什么方法呢?

    没有什么。随便你叫什么都行。自动装箱会帮你搞定的。

    你为什么要宣布 throws FileNotFoundException 从一个不能投掷的方法来说,这是另一个谜。