public class ChunkedWriteHandler extends ChannelDuplexHandler
ChannelHandler
增加了对异步写入大数据流的支持,既不花费大量内存也不获取OutOfMemoryError
。
大数据流如文件传输需要在ChannelHandler
实现中进行复杂的状态管理。
ChunkedWriteHandler
管理这样复杂的状态,以便您可以毫无困难地发送大型数据流。
要在您的应用程序中使用ChunkedWriteHandler
,您必须插入一个新的ChunkedWriteHandler
实例:
ChannelPipeline
p = ...;
p.addLast("streamer", new ChunkedWriteHandler
());
p.addLast("handler", new MyHandler());
一旦插入,您可以编写一个ChunkedInput
,以便ChunkedWriteHandler
可以将其拾取并按块读取流块的内容,并向下游写入获取的块:
Channel
ch = ...;
ch.write(new ChunkedFile
(new File("video.mkv"));
ChunkedInput
在某个事件或时间上生成一个块。
这样ChunkedInput
实施经常返回null
上ChunkedInput.readChunk(ChannelHandlerContext)
,导致无限期暂停传输。
要在新块可用时恢复转移,您必须致电resumeTransfer()
。
ChannelHandler.Sharable
Constructor and Description |
---|
ChunkedWriteHandler() |
ChunkedWriteHandler(int maxPendingWrites)
已过时。
|
Modifier and Type | Method and Description |
---|---|
void |
channelInactive(ChannelHandlerContext ctx)
|
void |
channelWritabilityChanged(ChannelHandlerContext ctx)
|
void |
flush(ChannelHandlerContext ctx)
|
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
void |
resumeTransfer()
继续从输入中获取块。
|
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
|
bind, close, connect, deregister, disconnect, read
channelActive, channelRead, channelReadComplete, channelRegistered, channelUnregistered, exceptionCaught, userEventTriggered
ensureNotSharable, handlerRemoved, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
exceptionCaught, handlerRemoved
public ChunkedWriteHandler()
@Deprecated public ChunkedWriteHandler(int maxPendingWrites)
ChunkedWriteHandler()
public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerAdded
在界面
ChannelHandler
handlerAdded
在课堂上
ChannelHandlerAdapter
java.lang.Exception
public void resumeTransfer()
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandler
ChannelOutboundInvoker.write(Object, ChannelPromise)
转发到ChannelPipeline
中的下一个ChannelOutboundHandler
。
子类可以重写此方法来更改行为。
write
在界面
ChannelOutboundHandler
write
在课堂上
ChannelDuplexHandler
ctx
- 为其写入操作的ChannelHandlerContext
msg
- 要写的消息
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
public void flush(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelDuplexHandler
ChannelHandlerContext.flush()
转发到ChannelPipeline
中的下一个ChannelOutboundHandler
。
子类可以重写此方法来更改行为。
flush
在界面
ChannelOutboundHandler
flush
在课堂上
ChannelDuplexHandler
ctx
- 进行冲洗操作的ChannelHandlerContext
java.lang.Exception
- 发生错误时抛出
public void channelInactive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelInactive()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelInactive
在界面
ChannelInboundHandler
channelInactive
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelWritabilityChanged(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelWritabilityChanged()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelWritabilityChanged
,界面
ChannelInboundHandler
channelWritabilityChanged
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
Copyright © 2008–2018 The Netty Project. All rights reserved.