使用FileOutputStream保存HashMap

时间:2015-12-14 13:49:03

标签: java serialization fileoutputstream

我试图用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;函数不适用于参数。我该怎么办?谢谢

3 个答案:

答案 0 :(得分:3)

除了之前的答案之外,还必须提到,Mat类来自OpenCV。根据它的Javadoc,它没有实现Serializable接口。因此,它无法通过Java中的对象序列化进行正确的序列化。

基本上,您可以使用第三方对象序列化库,该库支持序列化而不实现Serializable。相关:Serializing a class, which does not implement Serializable

另一种保留数据的方法是在CSVXML中实施您自己的自定义文件格式。例如:

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();
        }