从图1和图2的对比中可以 看到,图2少了第15行的读取操作,然后图2代码运行的结果,就是全部的hello worldABCDEFG,图1的代码就只有从read之后算起的ABCDEFG。
原因是什么呢?
读写指针在其中作怪!每次的读写操作都是从指针位置开始的。
图1中,第一次read之后,读写指针已经跑到hello word这个地方了,不是在0处,所以第二次read的结果是从这个非零指针之后开始往后读的,所以结果就只有后面的ABCDEFG。
图2中,刚开始没有进行read操作,所以读写指针一直保持在零处,所以下一次read是从零处开始读取的。结果为全部的hello worldABCDEFG。
从图3可以看到,用buf.string()这种方式可以看到并没有进行读指针的移动。
从图4可以看到,第一次打印出是hello world而不是hello worldhello world,是因为有一次read操作。读指针被移动了。
第二次打印出hello worldhello world是因为又写了一次。说明wtire写操作不移动指针,read读操作才移动指针。
从图5的ReadByte()和UnreadByte()操作,更能清晰的看到读写指针的移动。
有疑问加站长微信联系(非本文作者)