Я пишу сериализованные объекты в файл и читаю после него в android. Я получаю сообщение об ошибке «java.io.StreamCorruptedException: Wrong format: ac» при чтении второго объекта из файла. Ниже приведен код для записи объекта в файл.java.io.StreamCorruptedException: Неверный формат: ac error android
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 {}
}
Я вызываю метод, используя ниже строки кода, каждый раз, когда пользователь нажимает на кнопку и писать объект file.Method будет называться и объект будет сохранен как много раз, как пользователь нажимает на кнопку.
if(MainActivity.firstTime) {
writeToBinary("mySchedule", scheduleBeans, false);
MainActivity.firstTime=false;
} else {
writeToBinary("mySchedule", scheduleBeans, true);
}
Здесь scheduleBeans является объектом класса, который реализует сериализуемое. MainActivity.firstTime - общедоступная статическая логическая переменная, определенная в действии и используемая в качестве флага.
Теперь я читаю файл, используя код ниже.
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(getContext().openFileInput("mySchedule"));
Toast.makeText(getActivity().getApplicationContext(), "File Opened", Toast.LENGTH_SHORT).show();
while (true) {
arrayList.add((ScheduleBeans) ois.readObject());
Toast.makeText(getActivity().getApplicationContext(), "Read from File", Toast.LENGTH_SHORT).show();
}
} catch (EOFException e) {
Toast.makeText(getActivity().getApplicationContext(), "Exception End of File", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getActivity().getApplicationContext(), "Exception to Opening File", Toast.LENGTH_SHORT).show();
} finally {
try {
if (ois != null) {
ois.close();
// Toast.makeText(getActivity().getApplicationContext(), "Closing file", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
// Toast.makeText(getActivity().getApplicationContext(), "Exception in Closing file", Toast.LENGTH_SHORT).show();
}
}
Я получаю ошибку «java.io.StreamCorruptedException: Неправильный формат: AC» при чтении второго объекта из файла в случае, если файл имеет более чем объекты в нем.
Можете ли вы рассказать, что должно быть изменением кода для успешного чтения всех объектов в файле?
Обновление-- Проблема решена. Над рассматриваемым кодом отредактирован к разрешенному рабочему коду.
Возможный дубликат [StreamCorruptedException: недопустимый код типа: AC] (http://stackoverflow.com/questions/2393179/streamcorruptedexception-invalid-type-code-ac) – EJP
Трудно понять, почему вы хотели бы удалить соответствующую информацию из названия. – EJP
HI EJP, я прошел через сообщение, на которое вы ссылаетесь, и не может найти решение для устранения ошибки. –