Я объявил хэш-карту пар ключ-значение как,
HashMap<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
Я использую метод для сериализации этого hashmap и преобразования его в строку, используя следующий код:
public static String serializeMetadata(HashMap<String, String> metadata) throws IOException {
try(ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(metadata);
return baos.toString();
}
}
Когда я вызываю метод serializeMetadata и передаю свою хэш-карту в качестве входных данных, я ожидаю, что состояние карты будет передано потоком ObjectOutputStream (oos), и сохраню массив байтов в ByteArrayOutputStream (baos). когда toString () вызывается с baos, я ожидаю вывод
"{ключ1 = значение1, ключ2 = значение2, ключ3 = значение3}"
Точно такой же вид вывода, когда мы конвертируем хэш-карту в строку. Вместо этого я получаю нечитаемую отформатированную строку, например,
srjava.util.HashMap`F
loadFactorI thresholdxp? @ t key1t value1t key2t value2t key3t value3x
Я понимаю, что если я десериализирую baos, я снова получаю хэш-карту, и если я делаю toString (), я получаю нужный мне формат.
Мне нужна отформатированная строка, когда сериализованный хэш-файл конвертируется в строку, поэтому
1. Я могу написать модульный тест и установить хэш-карту для строки
2. Сохраните эту строку (которая имеет все отформатированные ключи и значения) в БД для последующего анализа данных.
3. Я могу вызвать строку из БД в приложении и десериализовать ее обратно в хэш-карту и продолжить использовать существующие состояния.
Мне не нужна строка JSON. Представьте, что все пары ключ-значение в hashmap хранятся в одном поле БД. Я не смог найти правильного решения, поэтому, если есть дубликаты ссылок, пожалуйста, оставьте их в комментариях. Любая помощь приветствуется. Спасибо!