org.jboss.netty.handler.stream

## Class ChunkedNioFile

- java.lang.Object
- - org.jboss.netty.handler.stream.ChunkedNioFile

All Implemented Interfaces:
  ChunkedInput

    public class ChunkedNioFile
    extends Object
    implements ChunkedInput

A `ChunkedInput` that fetches data from a file chunk by chunk using NIO `FileChannel`.

If your operating system supports zero-copy file transfer such as `sendfile()`, you might want to use `FileRegion` instead.

### Constructor Summary

Constructors
Constructor and Description
`ChunkedNioFile(File in)` Creates a new instance that fetches data from the specified file.
`ChunkedNioFile(FileChannel in)` Creates a new instance that fetches data from the specified file.
`ChunkedNioFile(FileChannel in, int chunkSize)` Creates a new instance that fetches data from the specified file.
`ChunkedNioFile(FileChannel in, long offset, long length, int chunkSize)` Creates a new instance that fetches data from the specified file.
`ChunkedNioFile(File in, int chunkSize)` Creates a new instance that fetches data from the specified file.

### Method Summary

Methods
`void` `close()` Releases the resources associated with the stream.
`long` `getCurrentOffset()` Returns the offset in the file where the transfer is happening currently.
`long` `getEndOffset()` Returns the offset in the file where the transfer will end.
`long` `getStartOffset()` Returns the offset in the file where the transfer began.
`boolean` `hasNextChunk()` Returns `true` if and only if there is any data left in the stream.
`boolean` `isEndOfInput()` Return `true` if and only if there is no data left in the stream and the stream has reached at its end.
`Object` `nextChunk()` Fetches a chunked data from the stream.

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

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

### Constructor Detail

#### ChunkedNioFile

    public ChunkedNioFile(File in)
                   throws IOException

Creates a new instance that fetches data from the specified file.

Throws:
  `IOException`

#### ChunkedNioFile

    public ChunkedNioFile(File in,
                  int chunkSize)
                   throws IOException

Creates a new instance that fetches data from the specified file.

Parameters:
  `chunkSize` - the number of bytes to fetch on each `nextChunk()` call
Throws:
  `IOException`

#### ChunkedNioFile

    public ChunkedNioFile(FileChannel in)
                   throws IOException

Creates a new instance that fetches data from the specified file.

Throws:
  `IOException`

#### ChunkedNioFile

    public ChunkedNioFile(FileChannel in,
                  int chunkSize)
                   throws IOException

Creates a new instance that fetches data from the specified file.

Parameters:
  `chunkSize` - the number of bytes to fetch on each `nextChunk()` call
Throws:
  `IOException`

#### ChunkedNioFile

    public ChunkedNioFile(FileChannel in,
                  long offset,
                  long length,
                  int chunkSize)
                   throws IOException

Creates a new instance that fetches data from the specified file.

Parameters:
  `offset` - the offset of the file where the transfer begins
  `length` - the number of bytes to transfer
  `chunkSize` - the number of bytes to fetch on each `nextChunk()` call
Throws:
  `IOException`

### Method Detail

#### getStartOffset

    public long getStartOffset()

Returns the offset in the file where the transfer began.

#### getEndOffset

    public long getEndOffset()

Returns the offset in the file where the transfer will end.

#### getCurrentOffset

    public long getCurrentOffset()

Returns the offset in the file where the transfer is happening currently.

#### hasNextChunk

    public boolean hasNextChunk()
                         throws Exception

Description copied from interface: `ChunkedInput`
Returns `true` if and only if there is any data left in the stream. Please note that `false` does not necessarily mean that the stream has reached at its end. In a slow stream, the next chunk might be unavailable just momentarily.

Specified by:
  `hasNextChunk` in interface `ChunkedInput`
Throws:
  `Exception`

#### isEndOfInput

    public boolean isEndOfInput()
                         throws Exception

Description copied from interface: `ChunkedInput`
Return `true` if and only if there is no data left in the stream and the stream has reached at its end.

Specified by:
  `isEndOfInput` in interface `ChunkedInput`
Throws:
  `Exception`

#### close

    public void close()
               throws Exception

Description copied from interface: `ChunkedInput`
Releases the resources associated with the stream.

Specified by:
  `close` in interface `ChunkedInput`
Throws:
  `Exception`

#### nextChunk

    public Object nextChunk()
                     throws Exception

Description copied from interface: `ChunkedInput`
Fetches a chunked data from the stream. The returned chunk is usually a `ChannelBuffer`, but you could extend an existing implementation to convert the `ChannelBuffer` into a different type that your handler or encoder understands. Once this method returns the last chunk and thus the stream has reached at its end, any subsequent `ChunkedInput.isEndOfInput()` call must return `false`.

Specified by:
  `nextChunk` in interface `ChunkedInput`
Returns:
  the fetched chunk, which is usually `ChannelBuffer`. `null` if there is no data left in the stream. Please note that `null` does not necessarily mean that the stream has reached at its end. In a slow stream, the next chunk might be unavailable just momentarily.
Throws:
  `Exception`