All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nustaq.serialization.FSTObjectInputNoShared Maven / Gradle / Ivy

Go to download

A fast java serialization drop in-replacement and some serialization based utils such as Structs and OffHeap Memory.

The newest version!
/*
 * Copyright 2014 Ruediger Moeller.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.nustaq.serialization;

import java.io.Externalizable;
import java.io.IOException;
import java.io.InputStream;

 /**
 * Subclass optimized for "unshared mode". Cycles and Objects referenced more than once will not be detected.
 * Additionally JDK compatibility is not supported (read/writeObject and stuff). Use case is highperformance
 * serialization of plain cycle free data (e.g. messaging). Can perform significantly faster (20-40%).
 */
public class FSTObjectInputNoShared extends FSTObjectInput {

    public FSTObjectInputNoShared() throws IOException {
    }

    public FSTObjectInputNoShared(FSTConfiguration conf) {
        super(conf);
        conf.setShareReferences(false);
    }

    /**
     * Creates a FSTObjectInput that uses the specified
     * underlying InputStream.
     *
     * @param in the specified input stream
     */
    public FSTObjectInputNoShared(InputStream in) throws IOException {
        super(in);
    }

    /**
     * Creates a FSTObjectInput that uses the specified
     * underlying InputStream.
     * 

* Don't create a FSTConfiguration with each stream, just create one global static configuration and reuseit. * FSTConfiguration is threadsafe. * * @param in the specified input stream * @param conf */ public FSTObjectInputNoShared(InputStream in, FSTConfiguration conf) { super(in, conf); } public void registerObject(Object o, int streamPosition, FSTClazzInfo info, FSTClazzInfo.FSTFieldInfo referencee) { return; } public void resetForReuse(InputStream in) throws IOException { if ( closed ) { throw new RuntimeException("can't reuse closed stream"); } getCodec().reset(); getCodec().setInputStream(in); } public void resetForReuseCopyArray(byte bytes[], int off, int len) throws IOException { if ( closed ) { throw new RuntimeException("can't reuse closed stream"); } getCodec().reset(); getCodec().resetToCopyOf(bytes, off, len); } protected Object instantiateAndReadNoSer(Class c, FSTClazzInfo clzSerInfo, FSTClazzInfo.FSTFieldInfo referencee, int readPos) throws Exception { Object newObj; newObj = clzSerInfo.newInstance(getCodec().isMapBased()); if (newObj == null) { throw new IOException(referencee.getDesc() + ":Failed to instantiate '" + c.getName() + "'. Register a custom serializer implementing instantiate or define empty constructor.."); } if ( clzSerInfo.isExternalizable() ) { getCodec().ensureReadAhead(readExternalReadAHead); ((Externalizable)newObj).readExternal(this); getCodec().readExternalEnd(); } else { FSTClazzInfo.FSTFieldInfo[] fieldInfo = clzSerInfo.getFieldInfo(); readObjectFields(referencee, clzSerInfo, fieldInfo, newObj,0,0); } return newObj; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy