У меня есть HashMap
, к которому я хотел бы сохранить и иметь быстрый доступ. Я использую Kryo для сериализации объекта
Kryo kryo = new Kryo();
MapSerializer serializer = new MapSerializer();
kryo.register(Location.class);
kryo.register(HashMap.class, serializer);
Output output = new Output(new FileOutputStream("src/main/resources/locations50K.kryo"));
kryo.writeObject(output, locationMap);
output.close();
Я могу успешно десериализовать с помощью
Input input = new Input(new FileInputStream("src/main/resources/locations50K.kryo"));
Map<String, Location> locationMap;
locationMap = kryo.readObject(input, HashMap.class);
input.close();
log.info(locationMap.size());
log.info показывает, что у меня на карте 231 045 записей.
Теперь я хотел бы получить доступ к моему файлу .kryo после компиляции *-jar-with-dependencies.jar (я использую Maven). Итак, вместо FileInputStream
, который читается из src/main/resources/
, я использую MyClass.class.getResourceAsStream
InputStream isr = MyClass.class.getResourceAsStream("/locations50K.kryo");
if(isr == null)
log.error("null input");
Input input = new Input(isr);
locationMap = kryo.readObject(input, HashMap.class);
input.close();
log.info(locationMap.size());
log.error никогда не отображается, а log.info говорит, что на моей карте 0 записей. Почему? isr
не равно нулю, поэтому он что-то читает, Kryo просто не может его десериализовать и не выдает никаких ошибок.