Markers are established in a data object to provide a means to refer to
specified parts of the object. Each marker is established within the
object by giving the location and length of the part of the object that
is to be marked. The marker continues to mark that part of the object as
changes are made elsewhere in the object. As data is received into the
cache computer it is stored in a sequence of buffers. A plurality of
filters, all executing concurrently, search for different interesting
string in the object. Each filter finds its interesting strings and marks
them using the markers. The result of filtering data of the object is a
marker attribute table identifying each of the markers by the offset and
length of the interesting strings located by the filters. Vend time is
the time at which the object is streamed out of the cache to a client
computer. Before the data is vended, a User Data Filter (UDF) executes a
call function which sets up a string substitution table. The substitution
table has entries for substitution, including the offset at which to make
the substitution and the string to be substituted into the streaming
object. A byte counter tracks the outgoing data stream of the object, and
whenever the byte count matches an offset of a marker, the length entry
in the marker attribute table determines the length of an omitted string,
and the substitute string is placed in the outgoing data stream.