StreamCorruptedException和ObjectInputStream | FileInputStream

时间:2017-08-20 14:38:24

标签: android stream fileinputstream objectinputstream

创建共享偏好xml文件的备份(以编程方式)并保存到外部存储后,我创建了一种恢复方法,方法是从ObjectInputStreamFileInputStream读取数据该xml文件,然后将数据放回应用程序的共享首选项。

这就是我恢复数据的方式:

public void restoreFAV(Context context) {
    File src = new File(storagePath+PREFS_NAME+".xml");
    ObjectInputStream input = null;
    try {
        input = new ObjectInputStream(new FileInputStream(src));
        SharedPreferences.Editor prefEdit =
                      context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit();
        Log.d("Pref Restore prefEdit",prefEdit.toString());
        prefEdit.clear();
        Log.d("Pref Restore prefEdit",prefEdit.toString());

        Map<String, ?> entries = (Map<String, ?>) input.readObject();
        Log.d("Pref Restore entries",entries.toString());

        for (Map.Entry<String, ?> entry : entries.entrySet()) {
            Object v = entry.getValue();
            Log.d("Pref Restore Object v",v.toString());
            String key = entry.getKey();
            Log.d("Pref Restore String key", key);
            prefEdit.putString(key, ((String) v));
        }
        prefEdit.apply();
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (input != null) {
                input.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

但我得到StreamCorruptedException例外。

08-20 18:42:44.228: W/System.err(28802): java.io.StreamCorruptedException
08-20 18:42:44.238: W/System.err(28802):    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2115)
08-20 18:42:44.238: W/System.err(28802):    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)

我做错了什么!?

0 个答案:

没有答案
相关问题