字节数组到Bundle

时间:2013-01-11 15:29:35

标签: android

我有一个Bundle,我把它作为字节数组存储到磁盘上。现在,当我检索它时,我采用字节数组。如何将其再次转换为Bundle

byte fileContent[] =  new byte[(int)file.length()];
int numerOfReturnedbytes = 0;

try {
    //read the stream and set it into the byte array readFileByteArray
    //and returns the numerOfReturnedbytes. If returns -1 means that
    //that the end of the stream has been reached.
    numerOfReturnedbytes = fis.read(fileContent);
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

if (numerOfReturnedbytes == -1) {
    return;
} else {
    //creating empty parcel object
    Parcel parcel = Parcel.obtain();
    //un-marshalling the data contained into the byte array  to the parcel
    parcel.unmarshall(fileContent, 0, numerOfReturnedbytes);
}

fileContent是字节数组。关于如何解决我的问题的任何想法?

3 个答案:

答案 0 :(得分:0)

不要这样做。来自Android文档:

  

Parcel不是通用序列化机制。此类(以及用于将任意对象放入包中的相应Parcelable API)被设计为高性能IPC传输。因此,将任何Parcel数据放入持久存储中是不合适的:Parcel中任何数据的底层实现的更改都可能导致旧数据不可读。

这意味着,在操作系统升级后,应用程序写入的数据可能会变得不可读。

答案 1 :(得分:0)

要将Bundle转换为ByteArray

    public byte[] bundleToBytes(@NonNull Bundle bundle) {
        Parcel parcel = Parcel.obtain();
        parcel.writeBundle(bundle);
        byte[] bytes = parcel.marshall();
        parcel.recycle();
        return bytes;
    }

要将ByteArray转换为Bundle

    @NonNull
    public Bundle bytesToBundle(byte[] bytes) {
        Parcel parcel = Parcel.obtain();
        parcel.unmarshall(bytes, 0, bytes.length);
        parcel.setDataPosition(0);
        Bundle bundle = parcel.readBundle(ClassWithinProject.class.getClassLoader());
        parcel.recycle();
        return bundle;
    }

答案 2 :(得分:-1)

会是这样的:

Bundle bundle = Bundle.CREATOR.createFromParcel(parcel);

一旦你有了包裹?

修改

或者是

Bundle bundle = parcel.readParcelable(null);

?我不记得了。我阅读了文档,但你知道......

(实际上,我真的不知道什么是最好的,他们似乎做了几乎相同的事情)

编辑2

还有

Bundle bundle = parcel.readBundle();

令人惊讶的是文档中的信息量。我应该经常去那里。