org.vertx.java.core.streams

## Class Pump

- java.lang.Object
- - org.vertx.java.core.streams.Pump

    public class Pump
    extends java.lang.Object

Pumps data from a `ReadStream` to a `WriteStream` and performs flow control where necessary to prevent the write stream from getting overloaded.

Instances of this class read bytes from a `ReadStream` and write them to a `WriteStream`. If data can be read faster than it can be written this could result in the write queue of the `WriteStream` growing without bound, eventually causing it to exhaust all available RAM.

To prevent this, after each write, instances of this class check whether the write queue of the `WriteStream` is full, and if so, the `ReadStream` is paused, and a `drainHandler` is set on the `WriteStream`. When the `WriteStream` has processed half of its backlog, the `drainHandler` will be called, which results in the pump resuming the `ReadStream`.

This class can be used to pump from any `ReadStream` to any `WriteStream`, e.g. from an `HttpServerRequest` to an `AsyncFile`, or from `NetSocket` to a `WebSocket`.

### Method Summary

Methods
`static Pump` `createPump(ReadStream rs, WriteStream ws)` Create a new `Pump` with the given `ReadStream` and `WriteStream`
`static Pump` `createPump(ReadStream rs, WriteStream ws, int writeQueueMaxSize)` Create a new `Pump` with the given `ReadStream` and `WriteStream` and `writeQueueMaxSize`
`int` `getBytesPumped()` Return the total number of bytes pumped by this pump.
`void` `setWriteQueueMaxSize(int maxSize)` Set the write queue max size to `maxSize`
`void` `start()` Start the Pump.
`void` `stop()` Stop the Pump.

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

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

### Method Detail

#### createPump

    public static Pump createPump(ReadStream rs,
                  WriteStream ws)

Create a new `Pump` with the given `ReadStream` and `WriteStream`

#### createPump

    public static Pump createPump(ReadStream rs,
                  WriteStream ws,
                  int writeQueueMaxSize)

Create a new `Pump` with the given `ReadStream` and `WriteStream` and `writeQueueMaxSize`

#### setWriteQueueMaxSize

    public void setWriteQueueMaxSize(int maxSize)

Set the write queue max size to `maxSize`

#### start

    public void start()

Start the Pump. The Pump can be started and stopped multiple times.

#### stop

    public void stop()

Stop the Pump. The Pump can be started and stopped multiple times.

#### getBytesPumped

    public int getBytesPumped()

Return the total number of bytes pumped by this pump.