如何将一个对象分解为byte[]?
我如何破坏一个对象——更具体地说是一个 Parcelable;实际上它是一个包,但要点是相同的 --- 到一个 byte[] 中?我认为我这样做的方式是一个很好的解决方案,但显然我错了。
这里只是作为参考,这是我做的旧方法。
public static byte[] getBytes(Object obj) throws java.io.IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
byte[] data = bos.toByteArray();
return data;
}
谢谢 ~Aedon
编辑 1::
破坏像这样传递 Bundle 的对象会导致 NotSerializedException。
How do I break an object --- a Parcelable to be more specific; actually it's a bundle but the point is the same --- into a byte[]? I thought that the way I was doing it was a good solution but apparently I was mistaken.
Just for reference here is the old way I was doing it.
public static byte[] getBytes(Object obj) throws java.io.IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
oos.close();
bos.close();
byte[] data = bos.toByteArray();
return data;
}
Thanks ~Aedon
Edit 1::
Breaking an object like this passing a Bundle to it causes a NotSerializableException.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你的代码看起来大部分都很好。我建议如下:
Your code looks mostly fine. I would suggest the following:
问题提到了 Parcelable,它并不总是可序列化的。
我认为正确的方法是将 Parcelable 写入 Parcel。
然后使用 Parcel 的 marshall() 方法写出原始字节。
我用它玩了一下。如果您的 Parcelable 遵循协议,则以下代码将为 Parcelable 写出正确的字节数组。假设 MyParcelable 包含 2 个字符串和 1 个 int。
另请参阅如何在 Android 中使用 Parcel?
The question mentions Parcelable, which is not always Serializable.
I think the right approach would be to write Parcelable to Parcel.
Then use Parcel's marshall() method to write raw bytes out.
I played a little with it. If your Parcelable follows the protocol, following code writes out correct byte array for Parcelable. Assume that MyParcelable contains 2 strings and one int.
Also see How to use Parcel in Android?
使用 Okio 库,它是 ByteArrayOutputStream 的便捷替代品,并且具有更强大的 API。
Use Okio library that is a convenient replacement for ByteArrayOutputStream and with more powerful API.