src/main/java/org/nustaq/serialization/serializers/FSTStructSerializer.java
@Override
    public void writeObject(FSTObjectOutput out, Object toWrite, FSTClazzInfo clzInfo, FSTClazzInfo.FSTFieldInfo referencedBy, int streamPosition) throws IOException {
        FSTStruct str = (FSTStruct) toWrite;
        if ( ! str.isOffHeap() ) {
            str = str.toOffHeap();
        }
        int byteSize = str.getByteSize();
        out.writeInt(byteSize);
        if ( COMPRESS ) {
            long base = str.___offset;
            int intsiz = byteSize/4;
            for ( int i=0; i<intsiz;i++ ) {
                int value = str.getInt();
                value = (value << 1) ^ (value >> 31);
                str.___offset+=4;
                while ((value & 0xFFFFFF80) != 0L) {
                    out.writeByte((value & 0x7F) | 0x80);
                    value >>>= 7;
                }
                out.writeByte(value & 0x7F);
            }
            int remainder = byteSize&3;
            for ( int i = 0; i < remainder; i++) {
                byte aByte = str.getByte();
                out.writeByte(aByte);
                str.___offset++;
            }
            str.___offset = base;
        } else {
            byte b[] = new byte[byteSize]; // fixme: cache threadlocal
            str.getBase().getArr(str.getOffset(), b, 0, byteSize);
            out.write( b, 0, byteSize);
        }
    }
@Override
    public void writeObject(FSTObjectOutput out, Object toWrite, FSTClazzInfo clzInfo, FSTClazzInfo.FSTFieldInfo referencedBy, int streamPosition) throws IOException {
        FSTStruct str = (FSTStruct) toWrite;
        if ( ! str.isOffHeap() ) {
            str = str.toOffHeap();
        }
        int byteSize = str.getByteSize();
        out.writeInt(byteSize);
        if ( COMPRESS ) {
            long base = str.___offset;
            int intsiz = byteSize/4;
            for ( int i=0; i<intsiz;i++ ) {
                int value = str.getInt();
                value = (value << 1) ^ (value >> 31);
                str.___offset+=4;
                while ((value & 0xFFFFFF80) != 0L) {
                    out.writeByte((value & 0x7F) | 0x80);
                    value >>>= 7;
                }
                out.writeByte(value & 0x7F);
            }
            int remainder = byteSize&3;
            for ( int i = 0; i < remainder; i++) {
                byte aByte = str.getByte();
                out.writeByte(aByte);
                str.___offset++;
            }
            str.___offset = base;
        } else {
            byte b[] = new byte[byteSize]; // fixme: cache threadlocal
            str.getBase().getArr(str.getOffset(), b, 0, byteSize);
            out.write( b, 0, byteSize);
        }
    }
@ Override public void writeObject ( FSTObjectOutput out , Object toWrite , FSTClazzInfo clzInfo , FSTClazzInfo . FSTFieldInfo referencedBy , int streamPosition ) throws IOException { FSTStruct str = ( FSTStruct ) toWrite ; if ( ! str . isOffHeap ( ) ) { str = str . toOffHeap ( ) ; } int byteSize = str . getByteSize ( ) ; out . writeInt ( byteSize ) ; if ( COMPRESS ) { long base = str . ___offset ; int intsiz = byteSize / 4 ; for ( int i = 0 ; i < intsiz ; i ++ ) { int value = str . getInt ( ) ; value = ( value << 1 ) ^ ( value >> 31 ) ; str . ___offset += 4 ; while ( ( value & 0xFFFFFF80 ) != 0L ) { out . writeByte ( ( value & 0x7F ) | 0x80 ) ; value >>>= 7 ; } out . writeByte ( value & 0x7F ) ; } int remainder = byteSize & 3 ; for ( int i = 0 ; i < remainder ; i ++ ) { byte aByte = str . getByte ( ) ; out . writeByte ( aByte ) ; str . ___offset ++ ; } str . ___offset = base ; } else { byte b [ ] = new byte [ byteSize ] ; // fixme: cache threadlocal str . getBase ( ) . getArr ( str . getOffset ( ) , b , 0 , byteSize ) ; out . write ( b , 0 , byteSize ) ; } }
write the contents of a given object
write the contents of a given object