使用 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
保存数据的另一种方法是在 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 classes 或 JDK 基本文件 io.
轻松解析/编写
我正在尝试使用 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
保存数据的另一种方法是在 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 classes 或 JDK 基本文件 io.
轻松解析/编写