4

我只是对此感到好奇。令我震惊的是,StringBuilder 的行为在功能上(如果不是技术上)与 Stream 相同——它是一个可以添加其他数据的数据箱。

再次,只是好奇。

4

6 回答 6

10

StringBuilder不仅仅是附加功能。它还具有插入功能,这对于流来说是不自然的。如果StringWriter您想要一个包含StringBuilder.

于 2009-01-30T17:51:15.583 回答
10

Stream 是二进制数据的输入和输出。

StringBuilder 是构建文本数据的方法。

除此之外,还有状态问题 - StringBuilder 只有当前值,不知道“位置”。它允许您在其中的任何位置访问和更改数据。另一方面,流在逻辑上是一个潜在的无限数据流,在中间的某个地方有一个光标来说明你要去哪里。您通常只是向前读/写,使用 Seek/Position 跳到数据流的特定部分。

试着想象一下用 StringBuilder 实现 Stream API ......它只是不适合。你可以这样做,但基本上你会得到 StringReader 和 StringWriter。

于 2009-01-30T18:31:18.170 回答
6

流通常是指外部输入/输出源(文件、网络)。StringBuilder 没有这样的特点。

于 2009-01-30T17:50:15.647 回答
3

因为它不是真正的流。它更像是一个增长的缓冲区。

于 2009-01-30T17:50:16.443 回答
1

虽然两者都可以添加数据,但整体功能不同。

Stream 用于从/向某个源输入或输出数据,而不是用于构建某些东西。StringBuilder 不需要 Stream 提供的功能,如缓冲等来构建资源。

于 2009-01-30T17:50:16.817 回答
1

另一方面,您会在 System.IO 中找到StringReader / Writer类。StringWriter例如针对底层StringBuilder实现TextWriter

就我个人而言,我从未使用过它,但如果你有一个文本文件写入例程,你可以让它对TextWriter起作用。然后在您的测试中,不是实例化StreamWriter ,而是实例化StringWriter,然后您可以通过查看底层StringBuilder来检查写入的内容。

现在我头晕...

于 2009-01-30T18:47:16.920 回答