我正在编写序列化对象到文件并在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"从文件中读取第二个对象时,如果文件中有多个对象。
您能告诉我们代码中的更改应该成功读取文件中的所有对象吗?
更新 - 问题已解决。上面的代码被编辑为已解决的工作代码。
答案 0 :(得分:0)
你在两种情况下都使用MODE_APPEND,包括你不应该附加到文件的情况。
你应该只在其他情况下使用它。