java Transfer-Encoding 解析!

本文介绍了一个用于处理分块传输编码的算法实现。该方法能够从输入的字节数组中解析出分块的数据,并将其写入到一个新的字节数组输出流中。支持普通数据和分块编码数据的处理。

public class NettyHttpServerHandler extends ChannelInboundHandlerAdapter { static Logger logger = LoggerFactory.getLogger(NettyHttpServerHandler.class); static final byte[] HTTP_403_DATA = "<h1>403 Forbidden</h1><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding--><!--padding-->".getBytes(); static final String HEADER_ENCODING = "ISO-8859-1"; private static final AttributeKey<Session> SESSION_KEY = AttributeKey.valueOf("session"); @Override public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception { FullHttpRequest fhr = (FullHttpRequest) msg; String uri = fhr.uri(); Packet resp = Packet.create(1024); // uri的第二段,就是通道标签 if (uri.startsWith("/video/")) { String tag = uri.substring("/video/".length()); resp.addBytes("HTTP/1.1 200 OK\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Connection: keep-alive\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Content-Type: video/x-flv\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Transfer-Encoding: chunked\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Cache-Control: no-cache\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Access-Control-Allow-Origin: *\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("Access-Control-Allow-Credentials: true\r\n".getBytes(HEADER_ENCODING)); resp.addBytes("\r\n".getBytes(HEADER_ENCODING)); ctx.writeAndFlush(resp.getBytes()).await(); // 订阅视频数据 long wid = PublishManager.getInstance().subscribe(tag, Media.Type.Video, ctx).getId(); setSession(ctx, new Session().set("subscriber-id", wid).set("tag", tag)); }
03-08
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值