我有一个Object数组的Object数组。我想将其转换为字节数组,然后将其作为Object数组的数组接收。我已将ObjectOutputStream
与ByteArrayOutputStream
结合使用,将其转换为字节数组:
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];
两个数组相同,长度相同,firstArr
和secondArr
都是Object数组。所以,我遇到的问题是当我使用反序列化它时:
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(om.nakedPayload));
Object[] list = (Object[]) ois.readObject();
返回的数组列表的长度为38.这两个数组中的任何一个(firstArr
/ secondArr
)的长度。此外,它包含的数据只是firstArr
。 om.nakedPayload
是我从Kafka主题中读取的数据。我们在这里写了一个包装器,基本上它需要byte[]
用于读/写目的。
答案 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。
所有非瞬态字段都将参与序列化/反序列化,并与根“数组数组”对象一起恢复。