edu.stanford.nlp.pipeline.GenericAnnotationSerializer.java Source code

Java tutorial

Introduction

Here is the source code for edu.stanford.nlp.pipeline.GenericAnnotationSerializer.java

Source

package edu.stanford.nlp.pipeline;

import edu.stanford.nlp.util.Pair;

import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
 * Serializes Annotation objects using the default Java serializer
 */
public class GenericAnnotationSerializer extends AnnotationSerializer {

    boolean compress = false;

    public GenericAnnotationSerializer(boolean compress) {
        this.compress = compress;
    }

    public GenericAnnotationSerializer() {
        this(false);
    }

    /** Turns out, an ObjectOutputStream cannot append to a file. This is dumb. */
    public static class AppendingObjectOutputStream extends ObjectOutputStream {
        public AppendingObjectOutputStream(OutputStream out) throws IOException {
            super(out);
        }

        @Override
        protected void writeStreamHeader() throws IOException {
            // do not write a header, but reset
            reset();
        }
    }

    @Override
    public OutputStream write(Annotation corpus, OutputStream os) throws IOException {
        if (os instanceof AppendingObjectOutputStream) {
            ((AppendingObjectOutputStream) os).writeObject(corpus);
            return os;
        } else if (os instanceof ObjectOutputStream) {
            ObjectOutputStream objectOutput = new AppendingObjectOutputStream(
                    compress ? new GZIPOutputStream(os) : os);
            objectOutput.writeObject(corpus);
            return objectOutput;
        } else {
            ObjectOutputStream objectOutput = new ObjectOutputStream(compress ? new GZIPOutputStream(os) : os);
            objectOutput.writeObject(corpus);
            return objectOutput;
        }
    }

    @Override
    public Pair<Annotation, InputStream> read(InputStream is)
            throws IOException, ClassNotFoundException, ClassCastException {
        ObjectInputStream objectInput;
        if (is instanceof ObjectInputStream) {
            objectInput = (ObjectInputStream) is;
        } else {
            objectInput = new ObjectInputStream(compress ? new GZIPInputStream(is) : is);
        }
        Object annotation = objectInput.readObject();
        if (annotation == null)
            return null;
        if (!(annotation instanceof Annotation)) {
            throw new ClassCastException("ERROR: Serialized data does not contain an Annotation!");
        }
        return Pair.makePair((Annotation) annotation, (InputStream) objectInput);
    }

}