com.ericsson.otp.erlang
Class OtpInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.ByteArrayInputStream
          extended by com.ericsson.otp.erlang.OtpInputStream
All Implemented Interfaces:
java.io.Closeable

public class OtpInputStream
extends java.io.ByteArrayInputStream

Provides a stream for decoding Erlang terms from external format.

Note that this class is not synchronized, if you need synchronization you must provide it yourself.


Field Summary
static int DECODE_INT_LISTS_AS_STRINGS
           
 
Fields inherited from class java.io.ByteArrayInputStream
buf, count, mark, pos
 
Constructor Summary
OtpInputStream(byte[] buf)
           
OtpInputStream(byte[] buf, int flags)
          Create a stream from a buffer containing encoded Erlang terms.
OtpInputStream(byte[] buf, int offset, int length, int flags)
          Create a stream from a buffer containing encoded Erlang terms at the given offset and length.
 
Method Summary
static long byte_array_to_long(byte[] b, boolean unsigned)
           
 int getPos()
          Get the current position in the stream.
 int peek()
          Alias for peek1()
 int peek1()
          Look ahead one position in the stream without consuming the byte found there.
 int peek1skip_version()
           
 OtpErlangObject read_any()
          Read an arbitrary Erlang term from the stream.
 java.lang.String read_atom()
          Read an Erlang atom from the stream.
 byte[] read_binary()
          Read an Erlang binary from the stream.
 byte[] read_bitstr(int[] pad_bits)
          Read an Erlang bitstr from the stream.
 boolean read_boolean()
          Read an Erlang atom from the stream and interpret the value as a boolean.
 byte read_byte()
          Read one byte from the stream.
 char read_char()
          Read a character from the stream.
 OtpErlangObject read_compressed()
          Read a compressed term from the stream
 double read_double()
          Read an Erlang float from the stream.
 OtpErlangExternalFun read_external_fun()
           
 float read_float()
          Read an Erlang float from the stream.
 OtpErlangFun read_fun()
           
 int read_int()
          Read an integer from the stream.
 byte[] read_integer_byte_array()
          Read an integer from the stream.
 int read_list_head()
          Read a list header from the stream.
 long read_long()
          Read a long from the stream.
 long read_long(boolean unsigned)
           
 int read_map_head()
           
 int read_nil()
          Read an empty list from the stream.
 OtpErlangPid read_pid()
          Read an Erlang PID from the stream.
 OtpErlangPort read_port()
          Read an Erlang port from the stream.
 OtpErlangRef read_ref()
          Read an Erlang reference from the stream.
 short read_short()
          Read a short from the stream.
 java.lang.String read_string()
          Read a string from the stream.
 int read_tuple_head()
          Read a tuple header from the stream.
 int read_uint()
          Read an unsigned integer from the stream.
 long read_ulong()
          Read an unsigned long from the stream.
 short read_ushort()
          Read an unsigned short from the stream.
 int read1()
          Read a one byte integer from the stream.
 int read1skip_version()
           
 int read2BE()
          Read a two byte big endian integer from the stream.
 int read2LE()
          Read a two byte little endian integer from the stream.
 int read4BE()
          Read a four byte big endian integer from the stream.
 int read4LE()
          Read a four byte little endian integer from the stream.
 long readBE(int n)
          Read a bigendian integer from the stream.
 long readLE(int n)
          Read a little endian integer from the stream.
 int readN(byte[] abuf)
          Read an array of bytes from the stream.
 int readN(byte[] abuf, int off, int len)
          Read an array of bytes from the stream.
 int setPos(int pos)
          Set the current position in the stream.
 
Methods inherited from class java.io.ByteArrayInputStream
available, close, mark, markSupported, read, read, reset, skip
 
Methods inherited from class java.io.InputStream
read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DECODE_INT_LISTS_AS_STRINGS

public static int DECODE_INT_LISTS_AS_STRINGS
Constructor Detail

OtpInputStream

public OtpInputStream(byte[] buf)
Parameters:
buf -

OtpInputStream

public OtpInputStream(byte[] buf,
                      int flags)
Create a stream from a buffer containing encoded Erlang terms.

Parameters:
flags -

OtpInputStream

public OtpInputStream(byte[] buf,
                      int offset,
                      int length,
                      int flags)
Create a stream from a buffer containing encoded Erlang terms at the given offset and length.

Parameters:
flags -
Method Detail

getPos

public int getPos()
Get the current position in the stream.

Returns:
the current position in the stream.

setPos

public int setPos(int pos)
Set the current position in the stream.

Parameters:
pos - the position to move to in the stream. If pos indicates a position beyond the end of the stream, the position is move to the end of the stream instead. If pos is negative, the position is moved to the beginning of the stream instead.
Returns:
the previous position in the stream.

readN

public int readN(byte[] abuf)
          throws OtpErlangDecodeException
Read an array of bytes from the stream. The method reads at most buf.length bytes from the input stream.

Returns:
the number of bytes read.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

readN

public int readN(byte[] abuf,
                 int off,
                 int len)
          throws OtpErlangDecodeException
Read an array of bytes from the stream. The method reads at most len bytes from the input stream into offset off of the buffer.

Returns:
the number of bytes read.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

peek

public int peek()
         throws OtpErlangDecodeException
Alias for peek1()

Throws:
OtpErlangDecodeException

peek1

public int peek1()
          throws OtpErlangDecodeException
Look ahead one position in the stream without consuming the byte found there.

Returns:
the next byte in the stream, as an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

peek1skip_version

public int peek1skip_version()
                      throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read1

public int read1()
          throws OtpErlangDecodeException
Read a one byte integer from the stream.

Returns:
the byte read, as an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read1skip_version

public int read1skip_version()
                      throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read2BE

public int read2BE()
            throws OtpErlangDecodeException
Read a two byte big endian integer from the stream.

Returns:
the bytes read, converted from big endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read4BE

public int read4BE()
            throws OtpErlangDecodeException
Read a four byte big endian integer from the stream.

Returns:
the bytes read, converted from big endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read2LE

public int read2LE()
            throws OtpErlangDecodeException
Read a two byte little endian integer from the stream.

Returns:
the bytes read, converted from little endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read4LE

public int read4LE()
            throws OtpErlangDecodeException
Read a four byte little endian integer from the stream.

Returns:
the bytes read, converted from little endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

readLE

public long readLE(int n)
            throws OtpErlangDecodeException
Read a little endian integer from the stream.

Parameters:
n - the number of bytes to read
Returns:
the bytes read, converted from little endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

readBE

public long readBE(int n)
            throws OtpErlangDecodeException
Read a bigendian integer from the stream.

Parameters:
n - the number of bytes to read
Returns:
the bytes read, converted from big endian to an integer.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read_boolean

public boolean read_boolean()
                     throws OtpErlangDecodeException
Read an Erlang atom from the stream and interpret the value as a boolean.

Returns:
true if the atom at the current position in the stream contains the value 'true' (ignoring case), false otherwise.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an atom.

read_atom

public java.lang.String read_atom()
                           throws OtpErlangDecodeException
Read an Erlang atom from the stream.

Returns:
a String containing the value of the atom.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an atom.

read_binary

public byte[] read_binary()
                   throws OtpErlangDecodeException
Read an Erlang binary from the stream.

Returns:
a byte array containing the value of the binary.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a binary.

read_bitstr

public byte[] read_bitstr(int[] pad_bits)
                   throws OtpErlangDecodeException
Read an Erlang bitstr from the stream.

Parameters:
pad_bits - an int array whose first element will be set to the number of pad bits in the last byte.
Returns:
a byte array containing the value of the bitstr.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a bitstr.

read_float

public float read_float()
                 throws OtpErlangDecodeException
Read an Erlang float from the stream.

Returns:
the float value.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a float.

read_double

public double read_double()
                   throws OtpErlangDecodeException
Read an Erlang float from the stream.

Returns:
the float value, as a double.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a float.

read_byte

public byte read_byte()
               throws OtpErlangDecodeException
Read one byte from the stream.

Returns:
the byte read.
Throws:
OtpErlangDecodeException - if the next byte cannot be read.

read_char

public char read_char()
               throws OtpErlangDecodeException
Read a character from the stream.

Returns:
the character value.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an integer that can be represented as a char.

read_uint

public int read_uint()
              throws OtpErlangDecodeException
Read an unsigned integer from the stream.

Returns:
the integer value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as a positive integer.

read_int

public int read_int()
             throws OtpErlangDecodeException
Read an integer from the stream.

Returns:
the integer value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as an integer.

read_ushort

public short read_ushort()
                  throws OtpErlangDecodeException
Read an unsigned short from the stream.

Returns:
the short value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as a positive short.

read_short

public short read_short()
                 throws OtpErlangDecodeException
Read a short from the stream.

Returns:
the short value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as a short.

read_ulong

public long read_ulong()
                throws OtpErlangDecodeException
Read an unsigned long from the stream.

Returns:
the long value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as a positive long.

read_long

public long read_long()
               throws OtpErlangDecodeException
Read a long from the stream.

Returns:
the long value.
Throws:
OtpErlangDecodeException - if the next term in the stream can not be represented as a long.

read_long

public long read_long(boolean unsigned)
               throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read_integer_byte_array

public byte[] read_integer_byte_array()
                               throws OtpErlangDecodeException
Read an integer from the stream.

Returns:
the value as a big endian 2's complement byte array.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an integer.

byte_array_to_long

public static long byte_array_to_long(byte[] b,
                                      boolean unsigned)
                               throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read_list_head

public int read_list_head()
                   throws OtpErlangDecodeException
Read a list header from the stream.

Returns:
the arity of the list.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a list.

read_tuple_head

public int read_tuple_head()
                    throws OtpErlangDecodeException
Read a tuple header from the stream.

Returns:
the arity of the tuple.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a tuple.

read_nil

public int read_nil()
             throws OtpErlangDecodeException
Read an empty list from the stream.

Returns:
zero (the arity of the list).
Throws:
OtpErlangDecodeException - if the next term in the stream is not an empty list.

read_pid

public OtpErlangPid read_pid()
                      throws OtpErlangDecodeException
Read an Erlang PID from the stream.

Returns:
the value of the PID.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an Erlang PID.

read_port

public OtpErlangPort read_port()
                        throws OtpErlangDecodeException
Read an Erlang port from the stream.

Returns:
the value of the port.
Throws:
OtpErlangDecodeException - if the next term in the stream is not an Erlang port.

read_ref

public OtpErlangRef read_ref()
                      throws OtpErlangDecodeException
Read an Erlang reference from the stream.

Returns:
the value of the reference
Throws:
OtpErlangDecodeException - if the next term in the stream is not an Erlang reference.

read_fun

public OtpErlangFun read_fun()
                      throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read_external_fun

public OtpErlangExternalFun read_external_fun()
                                       throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException

read_string

public java.lang.String read_string()
                             throws OtpErlangDecodeException
Read a string from the stream.

Returns:
the value of the string.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a string.

read_compressed

public OtpErlangObject read_compressed()
                                throws OtpErlangDecodeException
Read a compressed term from the stream

Returns:
the resulting uncompressed term.
Throws:
OtpErlangDecodeException - if the next term in the stream is not a compressed term.

read_any

public OtpErlangObject read_any()
                         throws OtpErlangDecodeException
Read an arbitrary Erlang term from the stream.

Returns:
the Erlang term.
Throws:
OtpErlangDecodeException - if the stream does not contain a known Erlang type at the next position.

read_map_head

public int read_map_head()
                  throws OtpErlangDecodeException
Throws:
OtpErlangDecodeException