Peercast中“流”概念的分析

流在Peercast中是一个很重要的概念。
凡是数据从一个地方传输到另一个地方的操作都是流的操作,所以就网络交换数据而言,例如包的发送和接收,都可视为流操作。
Peercast中用Stream类来提供一个界面。
其继承类有FileStream和ClientSocket。

Stream类提供读取和写入各种不同类型数据(ID4类型、字符型、整型、字符串)的操作,例如
    long readLong()
    {
        long v;
        read(&v,4);
        CHECK_ENDIAN4(v);
        return v;
    }


void Stream::writeLine(const char *str)
{
 writeString(str);

 if (writeCRLF)
     write("/r/n",2);
 else
  write("/n",1);
}
其他还有readInt()readChar()writeString()

而这些操作都访问的是read()和write()函数
这里我们看看read()函数的定义
 virtual int read(void *,int)=0;
是个虚函数,而且这个虚函数在基类中并没有实现,而是留在子类中实现的
在FileStream中read()是从文件中读取相应字节的数据,在ClientSocket中read()是在网络中接收相应字节的数据。
在基类中使用一个未来才实现的方法是不是觉得有些不可思议?
这里基类依赖于它的派生类实现。我们通常都知道派生类依赖于基类实现,其实反过来也是可以成立的。
这样做的好处在于提供一个框架,使以后的程序员可以加入代码。
有关这方面的讨论可以参见《C++程序设计语言》设计和编程这一章。

 
IndirectStream(HTTP是其继承类)和AtomStream与Stream是包容关系,例如AtomStream包含Stream类型的对象,并提供各种函数对Stream类型的对象进行操作。
class AtomStream
{
   Stream &io;
}

void AtomStream::writeInt(ID4 id,int d)
{
 io.writeID4(id);
 io.writeInt(4);
 io.writeInt(d);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值