【发布时间】:2014-01-16 09:25:10
【问题描述】:
今天我试图将多个对象写入一个文件。我的对象是两个 String ArrayList,一个 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();
}
当我在 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)
编辑:供参考。
我实现了我想要的,通过首先将位图序列化为一个字节[]来编写一个位图、两个 ArrayList 和一个 ArrayList,通过 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>
【问题讨论】:
-
为什么不创建新类来保存所有对象并将新对象而不是多个对象存储在单个文件中/
-
你能在类中添加不同的类型吗?比如位图和双精度和字符串列表?我可以看到使用一种类型的对象是多么简单,但多种对象让我感到困惑
-
你可以在类中创建任何类型的变量
标签: java file bitmap io outputstream