Class ChunkedFile

java.lang.Object
io.netty.handler.stream.ChunkedFile
All Implemented Interfaces:
ChunkedInput<ByteBuf>

public class ChunkedFile extends Object implements ChunkedInput<ByteBuf>
A ChunkedInput that fetches data from a file chunk by chunk.

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

  • Field Details

    • file

      private final RandomAccessFile file
    • startOffset

      private final long startOffset
    • endOffset

      private final long endOffset
    • chunkSize

      private final int chunkSize
    • offset

      private long offset
  • Constructor Details

  • Method Details

    • startOffset

      public long startOffset()
      Returns the offset in the file where the transfer began.
    • endOffset

      public long endOffset()
      Returns the offset in the file where the transfer will end.
    • currentOffset

      public long currentOffset()
      Returns the offset in the file where the transfer is happening currently.
    • 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<ByteBuf>
      Throws:
      Exception
    • close

      public void close() throws Exception
      Description copied from interface: ChunkedInput
      Releases the resources associated with the input.
      Specified by:
      close in interface ChunkedInput<ByteBuf>
      Throws:
      Exception
    • readChunk

      @Deprecated public ByteBuf readChunk(ChannelHandlerContext ctx) throws Exception
      Deprecated.
      Specified by:
      readChunk in interface ChunkedInput<ByteBuf>
      Parameters:
      ctx - The context which provides a ByteBufAllocator if buffer allocation is necessary.
      Returns:
      the fetched chunk. 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
    • readChunk

      public ByteBuf readChunk(ByteBufAllocator allocator) throws Exception
      Description copied from interface: ChunkedInput
      Fetches a chunked data from the stream. Once this method returns the last chunk and thus the stream has reached at its end, any subsequent ChunkedInput.isEndOfInput() call must return true.
      Specified by:
      readChunk in interface ChunkedInput<ByteBuf>
      Parameters:
      allocator - ByteBufAllocator if buffer allocation is necessary.
      Returns:
      the fetched chunk. 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
    • length

      public long length()
      Description copied from interface: ChunkedInput
      Returns the length of the input.
      Specified by:
      length in interface ChunkedInput<ByteBuf>
      Returns:
      the length of the input if the length of the input is known. a negative value if the length of the input is unknown.
    • progress

      public long progress()
      Description copied from interface: ChunkedInput
      Returns current transfer progress.
      Specified by:
      progress in interface ChunkedInput<ByteBuf>