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, readchannelActive, channelRead, channelReadComplete, channelRegistered, channelUnregistered, exceptionCaught, userEventTriggeredensureNotSharable, handlerRemoved, isSharableclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitexceptionCaught, handlerRemovedpublic 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.