java.io.StreamCorruptedException:格式错误:ac错误android

时间:2016-02-06 00:23:17

标签: android file serialization objectinputstream objectoutputstream

我正在编写序列化对象到文件并在android中读取它。 我正在" java.io.StreamCorruptedException:格式错误:ac"从文件中读取第二个对象时出错。 下面是将对象写入文件的代码。

select (case when substring_index(q.value, ' ', 10) = q.value
             then q.value
             else concat(substring_index(q.value, ' ', 10), '...')
        end)

我使用以下代码行调用方法,每次用户点击按钮并将对象写入file.Method将被调用,对象将被保存多次,因为用户点击按钮。

public void writeToBinary (String filename, Object obj, boolean append){
    file = new File ("mySchedule");

    try{
        if (!append) { out = new ObjectOutputStream (getContext().openFileOutput(filename,Context.MODE_PRIVATE)); }
        else { out = new AppendableObjectOutputStream (getContext().openFileOutput(filename, Context.MODE_APPEND)); }
     //   Toast.makeText(getActivity().getApplicationContext(), "Starting to add to File", Toast.LENGTH_SHORT).show();
        out.writeObject(obj);
        out.flush();
        Toast.makeText(getActivity().getApplicationContext(), "Added to File", Toast.LENGTH_SHORT).show();
    }catch (Exception e){
        e.printStackTrace ();
       // Toast.makeText(getActivity().getApplicationContext(), "Exception to File", Toast.LENGTH_SHORT).show();
    }finally{
        try{
            if (out != null) out.close ();
          //  Toast.makeText(getActivity().getApplicationContext(), "Close to File", Toast.LENGTH_SHORT).show();
        }catch (Exception e){
            e.printStackTrace ();
        }
    }
}

private static class AppendableObjectOutputStream extends ObjectOutputStream {
    public AppendableObjectOutputStream(OutputStream out) throws IOException {
        super(out);
    }
    @Override
    protected void writeStreamHeader() throws IOException {}
}

这里,scheduleBeans是实现可序列化的类的对象。 MainActivity.firstTime是活动中定义的公共静态布尔变量,用作标志。

现在我正在使用以下代码阅读该文件。

       if(MainActivity.firstTime) {
            writeToBinary("mySchedule", scheduleBeans, false);
            MainActivity.firstTime=false;
        } else {
                writeToBinary("mySchedule", scheduleBeans, true);
        }

我收到错误" java.io.StreamCorruptedException:格式错误:ac"从文件中读取第二个对象时,如果文件中有多个对象。

您能告诉我们代码中的更改应该成功读取文件中的所有对象吗?

更新 - 问题已解决。上面的代码被编辑为已解决的工作代码。

1 个答案:

答案 0 :(得分:0)

你在两种情况下都使用MODE_APPEND,包括你不应该附加到文件的情况。

你应该只在其他情况下使用它。