代码之家  ›  专栏  ›  技术社区  ›  Mark Heath

c pushbackinputstream的实现

c#
  •  2
  • Mark Heath  · 技术社区  · 16 年前

    我需要一个Java的PubBaskPixFipe的C实现。我自己做了一个非常基本的版本,但是我想知道是否已经有一个经过良好测试并且性能良好的版本在某个地方可用。碰巧我总是把读到的字节向后推,所以实际上它只需要能够向后重新定位,缓冲到我指定的字节数。(像Java的BuffReDePixStudio中的标记和重置方法)。

    更新: 我要补充的是,我不能简单地重新定位流,因为canseek可能是错误的。(例如,当输入蒸汽为 NetworkStream )

    4 回复  |  直到 14 年前
        1
  •  1
  •   Marc Gravell    16 年前

    将数据推回到流中的问题在于 顶部 的流可能已经有一个本地数据缓冲区。这使得这种方法非常脆弱。就我个人而言,我会尽量避免这种情况,并在不需要推后的地方使用数据结构,或者可以使用单字节peek等。

        2
  •  1
  •   Lasse V. Karlsen    16 年前

    您需要构建一个包装类,它要么作为流运行,但支持最后x个字节的缓冲区,这样您至少可以在有限的距离内寻找,要么根本不是流,实际上您可以“将数据推回到输入流中”。

    不管怎样,你都得自己写点东西。

        3
  •  0
  •   Spence    16 年前

    你就不能用system.io.stream从当前位置读取后向后搜索吗?

    stream.Seek(-1, System.IO.SeekOrigin.Current)
    

    where-1可能是一个变量,表示您想返回多远?

        4
  •  0
  •   ShuggyCoUk    16 年前

    只要流指示它支持查找(canseek),那么

    stream.Seek(-offset, System.IO.SeekOrigin.Current)
    

    会没事的。