目标是将数据库行转换为Google Play游戏服务的“保存的游戏”快照,然后检索这些行并将其插入到将打开“保存的游戏”快照的辅助设备上。
我可以使用基本的字符串数据向Google Play游戏服务保存快照,也可以从中检索快照,但是如何将数据库行存储到字节数组(使用Google Play游戏服务存储快照数据需要字节数组),然后再返回保存的游戏快照?谢谢。
最佳答案
由于您要的是将内存中的数据库记录表示为byte []的方法。
如果我在您的位置,我首先将通过创建一个可以表示数据库记录内容的java类来进行简单建模。
例如:
数据库记录:{id,firstName,lastName}我将创建一个Java类作为如下模型:
public class Contact {
private long id;
private String firstName;
private String lastName;
// add getters and setters
}
现在,当您执行数据库查询并拥有一个或多个记录时,您可以为每条记录创建该模型的新实例,并从所拥有的记录中设置模型实例的内容。
Contact contact = new Contact();
contact.setFirstName("The first name from the database record");
//And so on.
现在将模型实例转换为字节[]
ByteArrayOutputStream arrOutStream = new ByteArrayOutputStream();
try {
ObjectOutputStream out = new ObjectOutputStream(arrOutStream);
out.writeObject(contact);
byte[] bytes = arrOutStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
并从byte []中读回该对象
byte[] bytesToRead;
ByteArrayInputStream arrInStream = new ByteArrayInputStream(bytesToRead);
try {
ObjectInputStream objectInStream = new ObjectInputStream(arrInStream);
contact = (Contact) objectInStream.readObject();
} catch (Exception e) {
e.printStackTrace();
}
现在,有了模型,您可以将其放回数据库中。
如果您需要对数据库中的多条记录写入一个字节[],则只需创建一个包含联系人列表的新模型即可:
class Contacts {
List<Contact> contactsList;
}
无需将每个记录序列化为byte [],您只需创建Contacts模型的一个实例,并在其中添加尽可能多的联系人,然后对Contacts实例仅进行一次序列化即可。