//发送响应头
if (headerBuffer.hasRemaining()) {
if (cio.write(headerBuffer) <= 0)
return true;
}
//发送响应正文
if (!headersOnly) {
if (content.send(cio))
return true;
}
return false;
}
/* 释放响应正文占用的资源 */
public void release() throws IOException {
content.release();
}
}
8.代表响应正文的Content接口及其实现类
Response类有一个成员变量content,表示响应正文,它被定义为Content类型:
private Content content; //响应正文
Content接口表示响应正文,它的定义如下:
public interface Content extends Sendable {
//正文的类型
String type();
//返回正文的长度。
//在正文还没有准备之前,即还没有调用prepare()方法之前,length()方法返回-1。
long length();
}
Content接口继承了Sendable接口,Sendable接口表示服务器端可发送给客户的内容,它的定义如下:
public interface Sendable {
// 准备发送的内容
public void prepare() throws IOException;
// 利用通道发送部分内容,如果所有内容发送完毕,就返回false
// 如果还有内容未发送,就返回true
// 如果内容还没有准备好,就抛出IllegalStateException
public boolean send(ChannelIO cio) throws IOException;
//当服务器发送内容完毕,就调用此方法,释放内容占用的资源
public void release() throws IOException;
}
|