我有一个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
是字节数组。关于如何解决我的问题的任何想法?
答案 0 :(得分:0)
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);
?我不记得了。我阅读了文档,但你知道......
(实际上,我真的不知道什么是最好的,他们似乎做了几乎相同的事情)
还有
Bundle bundle = parcel.readBundle();
令人惊讶的是文档中的信息量。我应该经常去那里。