# Using HTM with Kryo serializer

**URL:** <https://discourse.numenta.org/t/using-htm-with-kryo-serializer/3532>\
**Category:** HTM.Java\
**Tags:** serialization\
**Created:** [February 27, 2018, 11:41am UTC](https://discourse.numenta.org/t/using-htm-with-kryo-serializer/3532 "2018-02-27T11:41:43Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![alexsch](https://avatars.discourse-cdn.com/v4/letter/a/6de8d8/32.png) [@alexsch](https://discourse.numenta.org/u/alexsch)\
**Post date:** [February 27, 2018, 11:41am UTC](https://discourse.numenta.org/t/using-htm-with-kryo-serializer/3532/1 "2018-02-27T11:41:43Z")

</div>

Hello,

My question just arises from the topic [NPE during org.numenta.nupic.network.Layer deserialization](https://discourse.numenta.org/t/npe-during-org-numenta-nupic-network-layer-deserialization/3506/3)

I need to serialize HTM classes using Kryo serializer which used in Spark Streaming application.  
The serialization code looks like:

```auto
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import org.numenta.nupic.model.Persistable;
import org.numenta.nupic.network.Network;
import org.numenta.nupic.serialize.SerialConfig;
import org.numenta.nupic.serialize.SerializerCore;

public class SparkKryoHTMSerializer<T extends Persistable> extends Serializer<T> {
    private final SerializerCore htmSerializer = new SerializerCore(SerialConfig.DEFAULT_REGISTERED_TYPES);

    @Override
    public void write(Kryo kryo, Output kryoOutput, T t) {
        T preSerialized = t.preSerialize();
        byte[] serialized = htmSerializer.serialize(preSerialized);
        kryoOutput.writeInt(serialized.length);
        kryoOutput.writeBytes(serialized);
    }

    @Override
    public T read(Kryo kryo, Input kryoInput, Class<T> aClass) {
        int size = kryoInput.readInt();
        byte[] bytes = kryoInput.readBytes(size);
        return htmSerializer.deSerialize(bytes);
    }
}
```

Should the PersistenceAPI be used instead of just the SerializerCore?  
If so, is it possible to avoid to save HTM on disk and just get for each class its serialization byte array?

---

<div class="post-metadata">

**Author:** ![cogmission](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.numenta.org/cogmission/32/11_2.png) [@cogmission](https://discourse.numenta.org/u/cogmission)\
**Post date:** [March 2, 2018, 5:26pm UTC](https://discourse.numenta.org/t/using-htm-with-kryo-serializer/3532/2 "2018-03-02T17:26:51Z")

</div>

Hi @alexsch,

Thank you for using HTM.java!

I will take a look at this and get back to you shortly with some advice or a way forward…

Thanks!  
David
