org.apache.ignite.internal.util.nio

## Class GridBufferedParser

- java.lang.Object
- - org.apache.ignite.internal.util.nio.GridBufferedParser

All Implemented Interfaces:
  GridNioParser

    public class GridBufferedParser
    extends Object
    implements GridNioParser

This class implements stream parser based on `GridNioServerBuffer`.

The rule for this parser is that every message sent over the stream is prepended with 4-byte integer header containing message size. So, the stream structure is as follows:

         +--+--+--+--+--+--+...+--+--+--+--+--+--+--+...+--+
         | MSG_SIZE  |   MESSAGE  | MSG_SIZE  |   MESSAGE  |
         +--+--+--+--+--+--+...+--+--+--+--+--+--+--+...+--+

It expects that first 4 bytes in stream are `IgniteUtils.IGNITE_HEADER`. If beginning of a stream, isn't equal to these bytes than exception will be thrown.

### Constructor Summary

Constructors
Constructor and Description
`GridBufferedParser(boolean directBuf, ByteOrder order)`

### Method Summary

Methods
`byte[]` `decode(GridNioSession ses, ByteBuffer buf)` This method is called when input bytes are available on the underlying network connection.
`ByteBuffer` `encode(GridNioSession ses, Object msg)` This method is called whenever a message should be sent to the network connection and network buffer is ready to be filled with bytes.
`String` `toString()`

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

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

### Constructor Detail

#### GridBufferedParser

    public GridBufferedParser(boolean directBuf,
                      ByteOrder order)

Parameters:
  `directBuf` - Direct buffer.
  `order` - Byte order.

### Method Detail

#### decode

    public byte[] decode(GridNioSession ses,
                ByteBuffer buf)
                  throws IOException,
                         IgniteCheckedException

This method is called when input bytes are available on the underlying network connection.

Method must read given buffer until either it reaches the end of buffer or a valid user message is encountered. In this case it must return parsed message.

Specified by:
  `decode` in interface `GridNioParser`
Parameters:
  `ses` - Session on which bytes are read.
  `buf` - Buffer that contains input data.
Returns:
  Parsed user message or `null` if complete message has not been received yet. Note that in case of returning `null` given buffer must be completely read.
Throws:
  `IOException` - If exception occurred while reading data.
  `IgniteCheckedException` - If any user-specific error occurred.

#### encode

    public ByteBuffer encode(GridNioSession ses,
                    Object msg)
                      throws IOException,
                             IgniteCheckedException

This method is called whenever a message should be sent to the network connection and network buffer is ready to be filled with bytes.

Method must encode the complete message and return byte buffer from which data should be read.

Specified by:
  `encode` in interface `GridNioParser`
Parameters:
  `ses` - Session on which message is being sent.
  `msg` - Message to encode.
Returns:
  Buffer containing encoded message.
Throws:
  `IOException` - If exception occurred while encoding data.
  `IgniteCheckedException` - If any user-specific error occurred while encoding data.

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`

2015 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 1.0.0
Release Date | : March 31 2015