SerializableFST.java
package org.wikimedia.search.glent.fst;
import java.io.IOException;
import java.io.InvalidObjectException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
import org.apache.lucene.store.InputStreamDataInput;
import org.apache.lucene.store.OutputStreamDataOutput;
import org.apache.lucene.util.fst.FST;
import org.apache.lucene.util.fst.NoOutputs;
public class SerializableFST implements Serializable {
private FST<Object> automaton;
private SerializableFST() {
// Only for deserialization
}
SerializableFST(FST<Object> automaton) {
this.automaton = automaton;
}
FST<Object> getFST() {
return automaton;
}
private void writeObject(ObjectOutputStream out) throws IOException {
OutputStreamDataOutput osdo = new OutputStreamDataOutput(out);
automaton.save(osdo);
}
private void readObject(ObjectInputStream in) throws IOException {
automaton = new FST<>(new InputStreamDataInput(in), NoOutputs.getSingleton());
}
private void readObjectNoData() throws ObjectStreamException {
throw new InvalidObjectException("SerializableFST cannot be empty");
}
}