org.apache.solr.common.util

## Class JavaBinCodec

- java.lang.Object
- - org.apache.solr.common.util.JavaBinCodec

    public class JavaBinCodec
    extends Object

The class is designed to optimaly serialize/deserialize any supported types in Solr response. As we know there are only a limited type of items this class can do it with very minimal amount of payload and code. There are 15 known types and if there is an object in the object tree which does not fall into these types, It must be converted to one of these. Implement an ObjectResolver and pass it over It is expected that this class is used on both end of the pipes. The class has one read method and one write method for each of the datatypes

Note -- Never re-use an instance of this class for more than one marshal or unmarshall operation. Always create a new instance.

### Nested Class Summary

Nested Classes
`static interface` `JavaBinCodec.ObjectResolver`

### Field Summary

Fields
`static byte` `ARR`
`static byte` `BOOL_FALSE`
`static byte` `BOOL_TRUE`
`static byte` `BYTE`
`static byte` `BYTEARR`
`protected FastOutputStream` `daos`
`static byte` `DATE`
`static byte` `DOUBLE`
`static byte` `END`
`protected static Object` `END_OBJ`
`static byte` `EXTERN_STRING`
`static byte` `FLOAT`
`static byte` `INT`
`static byte` `ITERATOR`
`static byte` `LONG`
`static byte` `MAP`
`static byte` `NAMED_LST`
`static byte` `NULL`
`static byte` `ORDERED_MAP`
`static byte` `SHORT`
`static byte` `SINT`
`static byte` `SLONG`
`static byte` `SOLRDOC`
`static byte` `SOLRDOCLST`
`static byte` `SOLRINPUTDOC`
`static byte` `STR`
`static byte` `TAG_AND_LEN`
`protected byte` `tagByte`

### Constructor Summary

Constructors
Constructor and Description
`JavaBinCodec()`
`JavaBinCodec(JavaBinCodec.ObjectResolver resolver)`

### Method Summary

Methods
`void` `init(FastOutputStream os)` expert: sets a new output stream
`void` `marshal(Object nl, OutputStream os)`
`List<Object>` `readArray(FastInputStream dis)`
`byte[]` `readByteArray(FastInputStream dis)`
`String` `readExternString(FastInputStream fis)`
`List<Object>` `readIterator(FastInputStream fis)`
`Map<Object,Object>` `readMap(FastInputStream dis)`
`NamedList<Object>` `readNamedList(FastInputStream dis)`
`SimpleOrderedMap<Object>` `readOrderedMap(FastInputStream dis)`
`int` `readSize(FastInputStream in)`
`int` `readSmallInt(FastInputStream dis)`
`long` `readSmallLong(FastInputStream dis)`
`SolrDocument` `readSolrDocument(FastInputStream dis)`
`SolrDocumentList` `readSolrDocumentList(FastInputStream dis)`
`SolrInputDocument` `readSolrInputDocument(FastInputStream dis)`
`String` `readStr(FastInputStream dis)`
`Object` `readVal(FastInputStream dis)`
`static int` `readVInt(FastInputStream in)` The counterpart for `writeVInt(int, FastOutputStream)`
`static long` `readVLong(FastInputStream in)`
`Object` `unmarshal(InputStream is)`
`void` `writeArray(Collection coll)`
`void` `writeArray(List l)`
`void` `writeArray(Object[] arr)`
`void` `writeByteArray(byte[] arr, int offset, int len)`
`void` `writeExternString(String s)`
`void` `writeFloat(float val)`
`void` `writeInt(int val)`
`void` `writeIterator(Iterator iter)`
`boolean` `writeKnownType(Object val)`
`void` `writeLong(long val)`
`void` `writeMap(Map<?,?> val)`
`void` `writeNamedList(NamedList<?> nl)`
`boolean` `writePrimitive(Object val)`
`void` `writeSolrDocument(SolrDocument doc)`
`void` `writeSolrDocumentList(SolrDocumentList docs)`
`void` `writeSolrInputDocument(SolrInputDocument sdoc)`
`void` `writeStr(String s)` write the string as tag+length, with length being the number of UTF-8 bytes
`void` `writeTag(byte tag)`
`void` `writeTag(byte tag, int size)`
`void` `writeVal(Object val)`
`static void` `writeVInt(int i, FastOutputStream out)` Special method for variable length int (copied from lucene).
`static void` `writeVLong(long i, FastOutputStream out)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### NULL

    public static final byte NULL

See Also:
  Constant Field Values

#### BOOL_TRUE

    public static final byte BOOL_TRUE

See Also:
  Constant Field Values

#### BOOL_FALSE

    public static final byte BOOL_FALSE

See Also:
  Constant Field Values

#### BYTE

    public static final byte BYTE

See Also:
  Constant Field Values

#### SHORT

    public static final byte SHORT

See Also:
  Constant Field Values

#### DOUBLE

    public static final byte DOUBLE

See Also:
  Constant Field Values

#### INT

    public static final byte INT

See Also:
  Constant Field Values

#### LONG

    public static final byte LONG

See Also:
  Constant Field Values

#### FLOAT

    public static final byte FLOAT

See Also:
  Constant Field Values

#### DATE

    public static final byte DATE

See Also:
  Constant Field Values

#### MAP

    public static final byte MAP

See Also:
  Constant Field Values

#### SOLRDOC

    public static final byte SOLRDOC

See Also:
  Constant Field Values

#### SOLRDOCLST

    public static final byte SOLRDOCLST

See Also:
  Constant Field Values

#### BYTEARR

    public static final byte BYTEARR

See Also:
  Constant Field Values

#### ITERATOR

    public static final byte ITERATOR

See Also:
  Constant Field Values

#### END

    public static final byte END

See Also:
  Constant Field Values

#### SOLRINPUTDOC

    public static final byte SOLRINPUTDOC

See Also:
  Constant Field Values

#### TAG_AND_LEN

    public static final byte TAG_AND_LEN

See Also:
  Constant Field Values

#### STR

    public static final byte STR

See Also:
  Constant Field Values

#### SINT

    public static final byte SINT

See Also:
  Constant Field Values

#### SLONG

    public static final byte SLONG

See Also:
  Constant Field Values

#### ARR

    public static final byte ARR

See Also:
  Constant Field Values

#### ORDERED_MAP

    public static final byte ORDERED_MAP

See Also:
  Constant Field Values

#### NAMED_LST

    public static final byte NAMED_LST

See Also:
  Constant Field Values

#### EXTERN_STRING

    public static final byte EXTERN_STRING

See Also:
  Constant Field Values

#### daos

    protected FastOutputStream daos

#### END_OBJ

    protected static final Object END_OBJ

#### tagByte

    protected byte tagByte

### Constructor Detail

#### JavaBinCodec

    public JavaBinCodec()

#### JavaBinCodec

    public JavaBinCodec(JavaBinCodec.ObjectResolver resolver)

### Method Detail

#### marshal

    public void marshal(Object nl,
               OutputStream os)
                 throws IOException

Throws:
  `IOException`

#### init

    public void init(FastOutputStream os)

expert: sets a new output stream

#### unmarshal

    public Object unmarshal(InputStream is)
                     throws IOException

Throws:
  `IOException`

#### readOrderedMap

    public SimpleOrderedMap<Object> readOrderedMap(FastInputStream dis)
                                            throws IOException

Throws:
  `IOException`

#### readNamedList

    public NamedList<Object> readNamedList(FastInputStream dis)
                                    throws IOException

Throws:
  `IOException`

#### writeNamedList

    public void writeNamedList(NamedList<?> nl)
                        throws IOException

Throws:
  `IOException`

#### writeVal

    public void writeVal(Object val)
                  throws IOException

Throws:
  `IOException`

#### readVal

    public Object readVal(FastInputStream dis)
                   throws IOException

Throws:
  `IOException`

#### writeKnownType

    public boolean writeKnownType(Object val)
                           throws IOException

Throws:
  `IOException`

#### writeTag

    public void writeTag(byte tag)
                  throws IOException

Throws:
  `IOException`

#### writeTag

    public void writeTag(byte tag,
                int size)
                  throws IOException

Throws:
  `IOException`

#### writeByteArray

    public void writeByteArray(byte[] arr,
                      int offset,
                      int len)
                        throws IOException

Throws:
  `IOException`

#### readByteArray

    public byte[] readByteArray(FastInputStream dis)
                         throws IOException

Throws:
  `IOException`

#### writeSolrDocument

    public void writeSolrDocument(SolrDocument doc)
                           throws IOException

Throws:
  `IOException`

#### readSolrDocument

    public SolrDocument readSolrDocument(FastInputStream dis)
                                  throws IOException

Throws:
  `IOException`

#### readSolrDocumentList

    public SolrDocumentList readSolrDocumentList(FastInputStream dis)
                                          throws IOException

Throws:
  `IOException`

#### writeSolrDocumentList

    public void writeSolrDocumentList(SolrDocumentList docs)
                               throws IOException

Throws:
  `IOException`

#### readSolrInputDocument

    public SolrInputDocument readSolrInputDocument(FastInputStream dis)
                                            throws IOException

Throws:
  `IOException`

#### writeSolrInputDocument

    public void writeSolrInputDocument(SolrInputDocument sdoc)
                                throws IOException

Throws:
  `IOException`

#### readMap

    public Map<Object,Object> readMap(FastInputStream dis)
                               throws IOException

Throws:
  `IOException`

#### writeIterator

    public void writeIterator(Iterator iter)
                       throws IOException

Throws:
  `IOException`

#### readIterator

    public List<Object> readIterator(FastInputStream fis)
                              throws IOException

Throws:
  `IOException`

#### writeArray

    public void writeArray(List l)
                    throws IOException

Throws:
  `IOException`

#### writeArray

    public void writeArray(Collection coll)
                    throws IOException

Throws:
  `IOException`

#### writeArray

    public void writeArray(Object[] arr)
                    throws IOException

Throws:
  `IOException`

#### readArray

    public List<Object> readArray(FastInputStream dis)
                           throws IOException

Throws:
  `IOException`

#### writeStr

    public void writeStr(String s)
                  throws IOException

write the string as tag+length, with length being the number of UTF-8 bytes

Throws:
  `IOException`

#### readStr

    public String readStr(FastInputStream dis)
                   throws IOException

Throws:
  `IOException`

#### writeInt

    public void writeInt(int val)
                  throws IOException

Throws:
  `IOException`

#### readSmallInt

    public int readSmallInt(FastInputStream dis)
                     throws IOException

Throws:
  `IOException`

#### writeLong

    public void writeLong(long val)
                   throws IOException

Throws:
  `IOException`

#### readSmallLong

    public long readSmallLong(FastInputStream dis)
                       throws IOException

Throws:
  `IOException`

#### writeFloat

    public void writeFloat(float val)
                    throws IOException

Throws:
  `IOException`

#### writePrimitive

    public boolean writePrimitive(Object val)
                           throws IOException

Throws:
  `IOException`

#### writeMap

    public void writeMap(Map<?,?> val)
                  throws IOException

Throws:
  `IOException`

#### readSize

    public int readSize(FastInputStream in)
                 throws IOException

Throws:
  `IOException`

#### writeVInt

    public static void writeVInt(int i,
                 FastOutputStream out)
                          throws IOException

Special method for variable length int (copied from lucene). Usually used for writing the length of a collection/array/map In most of the cases the length can be represented in one byte (length < 127) so it saves 3 bytes/object

Throws:
  `IOException` - If there is a low-level I/O error.

#### readVInt

    public static int readVInt(FastInputStream in)
                        throws IOException

The counterpart for `writeVInt(int, FastOutputStream)`

Throws:
  `IOException` - If there is a low-level I/O error.

#### writeVLong

    public static void writeVLong(long i,
                  FastOutputStream out)
                           throws IOException

Throws:
  `IOException`

#### readVLong

    public static long readVLong(FastInputStream in)
                          throws IOException

Throws:
  `IOException`

#### writeExternString

    public void writeExternString(String s)
                           throws IOException

Throws:
  `IOException`

#### readExternString

    public String readExternString(FastInputStream fis)
                            throws IOException

Throws:
  `IOException`