将多个对象写入文件

时间:2014-01-02 20:51:08

标签: java file bitmap io outputstream

今天我正在尝试将多个对象写入文件。我的对象是两个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>

1 个答案:

答案 0 :(得分:0)

您可以使用要写入文件的对象编写ArrayList<Object>或类似内容,然后再将其转换为适当的格式。不过,我没有Android来测试它。