我一直在试图弄清楚这个序列化哈希表,并在一段时间内保存/加载到磁盘业务。当我调用方法'saveDataToDisk'时,我将它传递给我创建的哈希表对象。
它保存并且似乎工作正常,然后当我尝试加载它时,它会在读取时跳转到catch块
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/dev/null"));
。
错误输出如下,任何帮助将非常感激。先谢谢费拉斯。
public boolean saveDataToDisk(Object hashObject)
{
FileOutputStream fos;
try
{
fos = new FileOutputStream("/dev/null");
ObjectOutputStream oos;
oos = new ObjectOutputStream(fos);
oos.writeObject(hashObject);
oos.close();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
public static Hashtable<String, Object> loadDataFromDisk()
{
Hashtable<String, Object> newHash = null;
FileInputStream fis;
try
{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("/dev/null"));
newHash = (Hashtable<String, Object>) ois.readObject();
System.out.println("newHash");
}
catch (ClassNotFoundException cnfe)
{
Log.e("deserializeObject", "class not found error", cnfe);
return null;
}
catch (IOException ioe)
{
Log.e("deserializeObject", "io error", ioe);
return null;
}
if (newHash == null)
newHash = new Hashtable<String, Object>();
return newHash;
}
这是错误:
11-15 23:29:55.282: ERROR/deserializeObject(895): io error
11-15 23:29:55.282: ERROR/deserializeObject(895): java.io.EOFException
11-15 23:29:55.282: ERROR/deserializeObject(895): at java.io.DataInputStream.readShort(DataInputStream.java:376)
11-15 23:29:55.282: ERROR/deserializeObject(895): at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2365)
11-15 23:29:55.282: ERROR/deserializeObject(895): at java.io.ObjectInputStream.<init>(ObjectInputStream.java:433)
11-15 23:29:55.282: ERROR/deserializeObject(895): at B.Duy.Le.PersistentHandler.loadDataFromDisk(PersistentHandler.java:125)
11-15 23:29:55.282: ERROR/deserializeObject(895): at B.Duy.Le.PersistentTest$1.onClick(PersistentTest.java:85)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.view.View.performClick(View.java:2485)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.view.View$PerformClick.run(View.java:9080)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.os.Handler.handleCallback(Handler.java:587)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.os.Looper.loop(Looper.java:123)
11-15 23:29:55.282: ERROR/deserializeObject(895): at android.app.ActivityThread.main(ActivityThread.java:3683)
11-15 23:29:55.282: ERROR/deserializeObject(895): at java.lang.reflect.Method.invokeNative(Native Method)
11-15 23:29:55.282: ERROR/deserializeObject(895): at java.lang.reflect.Method.invoke(Method.java:507)
11-15 23:29:55.282: ERROR/deserializeObject(895): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-15 23:29:55.282: ERROR/deserializeObject(895): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-15 23:29:55.282: ERROR/deserializeObject(895): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
我使用了类似的代码....可能这可以帮到你。并且它正常工作
保存: 其中requestDataMap是HashMap
File directoryName = new File(Environment.getExternalStorageDirectory(),"/folder1/subfolder");
directoryName.mkdirs();
File outputFile = new File(directoryName, filename);
FileOutputStream fos;
try {
fos = new FileOutputStream(outputFile);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(requestDataMap);
fos.flush();
fos.close();
加载
HashMap<String, Object> requestDataMap=new HashMap<String, Object>();
File directoryName = new File(Environment.getExternalStorageDirectory(),"/folder1/subfolder1");
directoryName.mkdirs();
File outputFile = new File(directoryName,fileName);
FileInputStream fis;
try {
fis = new FileInputStream(outputFile);
ObjectInputStream ois = new ObjectInputStream(fis);
requestDataMap = (HashMap<String, Object>) ois.readObject();
ois.close();
}