[Expat-discuss] FW: OverExecuting characterDataHandler()
karl at waclawek.net
Wed Dec 10 18:44:42 CET 2008
James Renton wrote:
> I am using expat to quickly extract and parse an audio stream encoded in
> base64. This way I can include all kinds of useful meta-data as
> attributes of each chunk.
You mean the stream is XML, and the chunks are base64? I would be
surprised of Expat parsed base64 directly.
> The source of my audio produces 8000 – 32000 bytes per second. I just
> produced a working prototype and noticed that calls to my
> characterDataHandler() (set by using XML_SetCharacterDataHandler()) are
> occurring as follows:
> 1. All bytes up to but excluding the first/next carriage return (in my
> case 80)
> 2. Carriage return (single byte)
> 3. Repeat (1)
> I am pushing this data off-process and streaming it to various endpoints
> using sockets (not decoding). This is producing a VERY LARGE quantity of
> function calls to my handler which is not optimum. It would be much
> better if at least 1-15 kilobytes of data were passed to the
> characterDataHandler at a time rather. My questions:
> 1. How exactly does the character data parsing in expat work? Some
> insight in this regard might answer all of my questions.
> 2. Is the behavior of the libraries calls to the handler configurable
> in any way (possibly using #define’s, custom builds etc…)?
> 3. Is there any other way to decrease the number of function calls in
> this case?
The call-back logic would be hard to change, but you can always
accumulate character data in a buffer and make your other calls based on
having accumulated enough data to warrant a network call.
More information about the Expat-discuss