Страницы

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

понедельник, 1 апреля 2019 г.

Хранение сериализованных объектов в 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 С чем это может быть связано?


Ответ

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

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

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