我试图用FileOutputStream编写HashMap。 这就是我的代码。
public class ObjectStream implements Serializable{
public void serialize(HashMap<String, Mat> obj){
try {
FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Juergen\\fileoutputstream.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOutput);
out.write(obj);
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
问题在于&#34;写&#34;函数不适用于参数。我该怎么办?谢谢
答案 0 :(得分:3)
除了之前的答案之外,还必须提到,Mat
类来自OpenCV。根据它的Javadoc,它没有实现Serializable
接口。因此,它无法通过Java中的对象序列化进行正确的序列化。
基本上,您可以使用第三方对象序列化库,该库支持序列化而不实现Serializable
。相关:Serializing a class, which does not implement Serializable
另一种保留数据的方法是在CSV
或XML
中实施您自己的自定义文件格式。例如:
key1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
key2
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1
可以使用Apache Commons IO类或JDK基本文件io轻松解析/编写。
答案 1 :(得分:1)
使用writeObject()方法而不是write()方法:
out.writeObject(obj);
答案 2 :(得分:1)
如果您使用ObjectOutputStream
序列化数据,则根据要存储的数据类型调用正确的write*()
方法非常重要。请参阅JavaDoc for ObjectOutputStream.writeObject()
try {
FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Juergen\\fileoutputstream.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOutput);
out.writeObject(obj); //Writes an Object!
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}