今天我正在尝试将多个对象写入文件。我的对象是两个String ArrayLists,一个Double ArrayList和一个Bitmap。我可以编写所有ArrayLists并在另一端检索它们,但是当我将图片添加到文件中时,我得到Stream Corrupted Exceptions。这是因为我在一个文件中塞满了太多而且字节混乱了吗? 这是我写的:
try {
fos = openFileOutput(s, Context.MODE_PRIVATE);
selectedImage = ((BitmapDrawable) addRecipeIcon.getDrawable()).getBitmap();
selectedImage.compress(Bitmap.CompressFormat.JPEG, 90, fos);
oos = new ObjectOutputStream(fos);
oos.writeObject(Ing);
oos.writeObject(IngN);
oos.writeObject(Step);
fos.flush();
fos.close();
}
当我写下Bitmap以及列表时,我注意到DDMS已经写入了数据(位图+列表),但它并没有出现在另一边。
logcat的:
W/System.err(10187): java.io.StreamCorruptedException
W/System.err(10187): at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:2109)
W/System.err(10187): at java.io.ObjectInputStream.<init>(ObjectInputStream.java:372)
W/System.err(10187): at com.ollygrov.doughpro.Cal.myRecipe(Cal.java:808)
W/System.err(10187): at com.ollygrov.doughpro.Cal.setDoughInfo(Cal.java:1350)
W/System.err(10187): at com.ollygrov.doughpro.Cal.onCreate(Cal.java:198)
W/System.err(10187): at android.app.Activity.performCreate(Activity.java:5104)
W/System.err(10187): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
W/System.err(10187): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
W/System.err(10187): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
W/System.err(10187): at android.app.ActivityThread.access$600(ActivityThread.java:141)
W/System.err(10187): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
W/System.err(10187): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err(10187): at android.os.Looper.loop(Looper.java:137)
W/System.err(10187): at android.app.ActivityThread.main(ActivityThread.java:5041)
W/System.err(10187): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(10187): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(10187): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
W/System.err(10187): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
W/System.err(10187): at dalvik.system.NativeStart.main(Native Method)
编辑:供参考。
我实现了我想要的,编写一个Bitmap,两个ArrayList和一个ArrayList,首先将位图序列化为byte [],通过ObjectOutputStream以特定顺序写入每个对象,然后以相同的顺序加载另一端。我的订单是:
writeObject.byte[] (Bitmap),
writeObject.ArrayList<Double> (Ing),
writeObject.ArrayList<String> (IngN),
writeObject.ArrayList<String> (Step),
然后
byte[] b = readObject.byte[],
List 1 = readObject.ArrayList<Double>
List 2 = readObject.ArrayList<String>
List 3 = readObject.ArrayList<String>
答案 0 :(得分:0)
您可以使用要写入文件的对象编写ArrayList<Object>
或类似内容,然后再将其转换为适当的格式。不过,我没有Android来测试它。