Using the RandomAccessSink
The RandomAccessSink is a Sink with the ability to add hooks. To demonstrate its usage we can have a look at a FML (FAQ Markup Language)-page. The simple structure of such a page can be like:
  <faq id="1">
    <question/>
    <answer/>
  </faq>
  <faq id="2">
    <question/>
    <answer/>
  </faq>
Such structure would be parsed to the following page:
| faq["1"].question + link   faq["2"].question + link  | 
| faq["1"].question + anchor   faq["1"].answer faq["2"].question + anchor faq["2"].answer  | 
With a Sink you can only append and there's no option to buffer. This would mean that you have to go twice over the structure: once for only the questions and once for the question + answer.
When using the RandomAccesSink we can prepare the structure of the page
RandomAccessSink randomAccessSink = new RandomAccessSink(sinkFactory, outputStream, encoding); Sink questions = randomAccessSink.addSinkHook(); Sink qAndA = randomAccessSink.addSinkHook();
Now you can append the first question to both sinks, and append the answer to the second one. The same can be done with the second faq-entry.



