使用 FileOutputStream 保存 HashMap

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

        }
}

问题是 "write" 函数不适用于参数。我该怎么办?谢谢

使用 writeObject() 方法而不是 write() 方法:

out.writeObject(obj);

如果您使用 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();
        } 

除了前面的答案外,必须额外提及的是,Mat class 来自 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 classes 或 JDK 基本文件 io.

轻松解析/编写