对象

时间:2015-08-08 02:50:22

标签: java

我有一个Object数组的Object数组。我想将其转换为字节数组,然后将其作为Object数组的数组接收。我已将ObjectOutputStreamByteArrayOutputStream结合使用,将其转换为字节数组:

ByteArrayOutputStream b = new BAOS();
ObjectOutputStream o = new OOS();
o.writeObject(obj)  // obj being the array

然后,当我尝试阅读它时,我得到的只是第一个数组的内容。此外,接收的对象数组的大小等于各个数组的大小。

我尝试使用writeObject()的迭代但无济于事。

好的,我进一步尝试了多维数组方法:

byte[] firstArr = new byte[1];
oos.writeObject(orgArr[0]);
firstArr = baos.toByteArray();
byte[] secondArr = new byte[1];
oos.writeObject(orgArr[1]);
secondArr = baos.toByteArray();
byte[] combined = new byte[2];
combined[0] = firstArr[0];
combined[1] = secondArr[1];

两个数组相同,长度相同,firstArrsecondArr都是Object数组。所以,我遇到的问题是当我使用反序列化它时:

ObjectInputStream ois = new ObjectInputStream(
                    new ByteArrayInputStream(om.nakedPayload));
Object[] list = (Object[]) ois.readObject();

返回的数组列表的长度为38.这两个数组中的任何一个(firstArr / secondArr)的长度。此外,它包含的数据只是firstArrom.nakedPayload是我从Kafka主题中读取的数据。我们在这里写了一个包装器,基本上它需要byte[]用于读/写目的。

1 个答案:

答案 0 :(得分:1)

让我们简化任务并假设您的对象是Integer,然后序列化/反序列化的代码如下所示:

import java.io.*;

public class ArrayOfArrays {

    public static void main(String[] args) throws Exception{
        String fileName = "myobject.data";
        FileOutputStream fileOut = new FileOutputStream(fileName);
        ObjectOutputStream out = new ObjectOutputStream(fileOut);

        Integer[][] intArray = new Integer[3][3];
        intArray[0] = new Integer[] {11, 12, 13};
        intArray[1] = new Integer[] {21, 22, 23};
        intArray[2] = new Integer[] {31, 32, 33};

        out.writeObject(intArray);

        FileInputStream fileIn = new FileInputStream(fileName);
        ObjectInputStream in = new ObjectInputStream(fileIn);

        Integer[][] intArrayIn =  (Integer[][]) in.readObject();
    }
}


这将给出相同的“数组数组”对象。下一步我们可以用任何实现标记接口java.io.Serializable的类替换Integer。

所有非瞬态字段都将参与序列化/反序列化,并与根“数组数组”对象一起恢复。