Peercast中“流”概念的分析

来源:互联网 发布:工行网络金融品牌推广 编辑:程序博客网 时间:2024/05/16 12:51

流在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);
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 用死威胁不分手怎么办 狗的腿关节断了怎么办 狗狗的腿断了怎么办 扁桃体发炎长白色的东西怎么办 十几年旧伤复发怎么办 被撞当天没报警怎么办 90后欠30万债务怎么办 赌博输了钱后悔怎么办 借赌博输了80万怎么办 赌博输了50万怎么办 手机赌博输了钱怎么办 内存卡是扩容卡怎么办 坐了过山车想吐怎么办 坐完摇椅想吐怎么办 玩完过山车想吐怎么办 做了过山车想吐怎么办 坐车后恶心想吐怎么办 太胖了想减肥怎么办 被集资诈骗的人怎么办 教了作业没写怎么办 移动4g网速慢怎么办 小孩装病不去上学怎么办 卖衣服顾客嫌贵怎么办 当顾客说再看看怎么办 读完高中没考上大学怎么办 手抖不会写字了怎么办 字认识写不出来怎么办 八四把衣服发黄怎么办 孩孑在学校被打怎么办 在学校有人打我怎么办 孩子在学校不爱说话怎么办 孩子上幼儿园不和小朋友玩怎么办 遇到有人要打你怎么办 被表白了怎么办神回复 学校要发展我该怎么办 如果有人要打你怎么办 梦见有人要杀我怎么办 如果有人要杀我怎么办 梦到有人要杀我怎么办 感觉有人要杀我怎么办 我很自卑 没自信怎么办