Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Хранение сериализованных объектов в SQLite

#android #java #sqlite


Столкнулся с интересным глюком при хранение сериализованного объекта в SQLite
Есть некий класс который умеет сериализовать и десериализовать объекты. Если взять
массив строк например и провести операцию сериализации и обратно, получим как и полагается
начальный массив строк. Но если сериализовать массив, сохранить его в базе, достать
оттуда то мы уже получаем отличную последовательность байт, соответственно операция
десериализации проводится с ошибкой.
String[] anyarraystrings = {"26", "25", "21"};
byte[] bytec = Serilize.serializeObject(anyarraystrings);
cv.put("columnn", bytec);
    rowID = db.insert("pro", null, cv);
    Cursor c = db.query("pro", null, "_id = ?", new String[] {String.valueOf(rowID)},
null, null, "last_d DESC", "1");
    if (c.moveToFirst()){
        byte[] bytec2 = c.getBlob(c.getColumnIndex("columnn"));
        Log.d(LOG_TAG, "До хранения в бд:" + String.valueOf(bytec));
        Log.d(LOG_TAG, "После после хранения в бд:" + String.valueOf(bytec2));
    }

Вот вывод лога:
04-16 20:04:27.220: D/myLogs(279): До хранения в бд:[B@44eb6f48
04-16 20:04:27.220: D/myLogs(279): После хранения в бд:[B@44eb8ba0
С чем это может быть связано?    


Ответы

Ответ 1



Ваши рассуждения ложны. То, что Вы получили разные последовательности байт, ещё не говорит о том, что у Вас разные данные. Сверяйте сами данные. А то, что Вы выводите в лог - это просто адрес объекта. А он понятное дело может быть различным (и это даже логично, что в данном примере он различный. Конструкция String.valueOf(bytec) выводит значения адреса переменой, а не содержимое.

Комментариев нет:

Отправить комментарий