If we're going to implement serializable, I think we want to do it manually with `writeObject()` and `readObject()`. Otherwise the fact that we named the byte array `data` leaks, and we may make (dramatic) changes to the internals in the future.