我想实现一个将集合或映射转换为字节数组的方法。所以我写了这个片段:
public static byte[] getByteArray(Collection<?> coll) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(coll);
} catch (IOException e) {
e.printStackTrace;
} finally {
closeAll(baos, oos);
}
return baos.toByteArray();
}
然后我发现Map doesn't extend Collection,因此我不能使用相同的方法。我是否真的必须使用相同的代码编写另一种方法,因为它们没有共同的接口?像这样:
public static byte[] getByteArray(Map<?, ?> map) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(map);
} catch (IOException e) {
e.printStackTrace;
} finally {
closeAll(baos, oos);
}
return baos.toByteArray();
}
或者我应该使用其他解决方案,例如将集合和地图投射到对象?像这样:
public static byte[] getByteArray(Collection<?> coll) {
return getByteArray((Object) coll);
}
public static byte[] getByteArray(Map<?, ?> map) {
return getByteArray((Object) map);
}
public static byte[] getByteArray(Object obj) {
ByteArrayOutputStream baos = null;
ObjectOutputStream oos = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
} catch (IOException e) {
e.printStackTrace;
} finally {
closeAll(baos, oos);
}
return baos.toByteArray();
}
我认为第一种解决方案显然是一个糟糕的选择,后者有点奇怪。
有替代方案吗?
答案 0 :(得分:3)
只需使用您的第三个代码段,但不使用前两个方法;它们是不必要的。
ObjectOutputStream.writeObject
需要一个Object
,你所做的只是用资源清理来包装这种行为。使用Object
来解决问题没有任何明显的错误;虽然它通常不是你想要的,但有时也是如此。