目标是将数据库行转换为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实例仅进行一次序列化即可。

10-07 16:15
查看更多