android - ObjectInputStream java.io.StreamCorruptedException : Wrong format: 0 lollipop and marshmalow

标签 android android-5.0-lollipop android-6.0-marshmallow objectinputstream

我是 java 和 android 的初学者,我得到以下信息:

“java.io.StreamCorruptedException:格式错误:0”

当我尝试读回对象时。 但我只在 Lollipop 和棉花糖设备上获得它,当我在 Nougat(7.1) 上运行它时我完全没有问题。 有什么建议吗?

public class MainActivity extends AppCompatActivity {

public final String FILE_NAME = "FILE_NAME";
private List<Item>;
private ReadWriteFunctions readWriteFunctions = new ReadWriteFunctions();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Bitmap defaultBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.no_pic);

    //Read from internal storage
    items =readWriteFunctions.readObj(this,FILE_NAME);
    if (items == null){//if the file don't exist it returns null
        items = new ArrayList<>();
        items.add(new Item(false,"",defaultBitmap));
        Log.d("readObj", "Created new list");
    }

类代码:

public class ReadWriteFunctions {


public ArrayList<Item> readObj(Context context, String fileName) { 
    ArrayList<Item> arrayList;
    try {
        FileInputStream fis = context.openFileInput(fileName);
        ObjectInputStream ois = new ObjectInputStream(fis);
        arrayList = (ArrayList<Item>) ois.readObject();
        ois.close();
        return arrayList;
    }catch (IOException | ClassNotFoundException e){
        e.printStackTrace();
        return null;
    }
}

public void writObj(Context context,String fileName,Object obj) {
    try {
        FileOutputStream fos = context.openFileOutput(fileName,Context.MODE_PRIVATE);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(obj);
        oos.close();
        Log.d("writObj", "Saved");
    }catch (IOException e){
        e.printStackTrace();
        Log.d("writObj", "Save Fault");
    }

}

公共(public)类 Item 实现 Serializable{

private boolean itemChecked;
private String itemText;
private transient Bitmap itemPicture;


public Item(Item item) {//Constructor that receive item
    this.setItemChecked(item.isItemChecked());
    this.setItemText(item.getItemText());
    this.setItemPicture(item.getItemPicture());

}

public Item(boolean itemChecked, String itemText, Bitmap itemPicture) {
    this.itemChecked = itemChecked;
    this.itemText = itemText;
    this.itemPicture = itemPicture;
}


public boolean isItemChecked() {
    return itemChecked;
}

public void setItemChecked(boolean itemChecked) {
    this.itemChecked = itemChecked;
}

public String getItemText() {
    return itemText;
}

public void setItemText(String itemText) {
    this.itemText = itemText;
}

public Bitmap getItemPicture() {
    return itemPicture;
}

public void setItemPicture(Bitmap itemPicture) {
    this.itemPicture = itemPicture;
}



private void writeObject(java.io.ObjectOutputStream out) throws IOException {

    itemPicture.compress(Bitmap.CompressFormat.PNG, 100, out);
    out.defaultWriteObject();

}

private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {

    itemPicture = BitmapFactory.decodeStream(in);
    in.defaultReadObject();

}

错误:

09-08 12:38:53.607 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err: java.io.StreamCorruptedException: Wrong format: 0
09-08 12:38:53.607 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.corruptStream(ObjectInputStream.java:675)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:788)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readFieldValues(ObjectInputStream.java:1113)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:454)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at milshtein.yaacov.advancedshoppinglist.Item.readObject(Item.java:70)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1330)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1242)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1835)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:761)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.util.ArrayList.readObject(ArrayList.java:661)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1330)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1242)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1835)
09-08 12:38:53.608 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:761)
09-08 12:38:53.609 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
09-08 12:38:53.609 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
09-08 12:38:53.614 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at milshtein.yaacov.advancedshoppinglist.WriteReadInternalStorage.ReadWriteFunctions.readObj(ReadWriteFunctions.java:29)
09-08 12:38:53.617 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at milshtein.yaacov.advancedshoppinglist.MainActivity.onCreate(MainActivity.java:56)
09-08 12:38:53.617 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.Activity.performCreate(Activity.java:5990)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.ActivityThread.access$800(ActivityThread.java:151)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
09-08 12:38:53.618 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
09-08 12:38:53.621 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.os.Looper.loop(Looper.java:135)
09-08 12:38:53.622 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5254)
09-08 12:38:53.622 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
09-08 12:38:53.622 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
09-08 12:38:53.622 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
09-08 12:38:53.622 15576-15576/milshtein.yaacov.advancedshoppinglist W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

最佳答案

只是发布我解决问题的方式,以供将来遇到相同问题的任何人使用。

在:

public class Item implements Serializable

我改变了:这一行:

private boolean itemChecked;

到这一行:

private Boolean itemChecked;

据我所知,作为 bool 值的基元是可序列化的,所以我不知道为什么它会有所不同,我也不明白为什么它适用于牛轧糖而不适用于 Lollipop 和棉花糖。 但它现在工作得很好。 如果有人知道原因,我很乐意听到。

关于android - ObjectInputStream java.io.StreamCorruptedException : Wrong format: 0 lollipop and marshmalow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46117225/

相关文章:

android - 带有 Cardslib 库的 Material 卡

java - 在 android 的棉花糖设备中从 RSA key 生成私钥的异常

Android 通知 setSound 不工作

android - imageView 不显示在 alertDialog 中

Android 许可库备选方案

Android:使用定义的可绘制对象以编程方式更改按钮颜色

android - 是否可以在 Android 中从 xml 更改 Material 设计图标颜色?

Android 5.0 Lollipop 无法正确显示特殊字符

android - 一行代码上有许多错误?

android - 如何确定应用程序是否在 Android M(开发者预览版)上运行