Android 要绑定的字节数组

Android 要绑定的字节数组,android,Android,我有一个包,我把它作为字节数组存储到磁盘上。现在,当我检索它时,我获取字节数组。如何再次将其转换为Bundle fileContent是字节数组。有什么办法可以解决我的问题吗?不要那样做。从Android文档中: Parcel不是通用的序列化机制。此类和用于将任意对象放置到包裹中的相应包裹API设计为高性能IPC传输。因此,不适合将任何地块数据放入永久性存储:地块中任何数据的底层实现中的更改都可能导致旧数据无法读取 这意味着,在操作系统升级后,应用程序写入的数据可能会变得不可读。是否会出现以下情

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


fileContent是字节数组。有什么办法可以解决我的问题吗?

不要那样做。从Android文档中:

Parcel不是通用的序列化机制。此类和用于将任意对象放置到包裹中的相应包裹API设计为高性能IPC传输。因此,不适合将任何地块数据放入永久性存储:地块中任何数据的底层实现中的更改都可能导致旧数据无法读取


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

是否会出现以下情况:

Bundle bundle = Bundle.CREATOR.createFromParcel(parcel);
一旦你拿到包裹

编辑 还是这样

Bundle bundle = parcel.readParcelable(null);
??我不记得了。我看过文件,但你知道

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

编辑2 还有

Bundle bundle = parcel.readBundle();

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

将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;
    }

我不理解你的问题这实际上意味着什么?如果不应该这样做,我必须做什么?你可以单独编写捆绑包的元素。我需要将数据保存在内存中,仅用于用户会话。这意味着我最多需要15分钟。你不认为在我的情况下,这种方法很有用吗?在这种情况下,使用它可能是安全的。不完全确定你实际上是如何创建你的文件的,所以,是的,这可能不是它的工作方式。首先,如何创建文件?你介意和我分享一下吗?在某些情况下,了解封送处理是如何完成的,在解封数据时非常有用。您要查找的是marshall,而不是createByteArray。你使用解组器的事实可能会让你大吃一惊。什么都没用。我将设法找到另一条没有包裹的路。感谢您的帮助njzk2parcel.setDataPosition0;这是在您尝试用包裹打包之前要做的一个重要步骤。
    @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;
    }