I would like to have this in, because there are other use-cases of this. Maybe one TokenStream chain is not caching on the top filter, but maybe directly after the tokenizer and before the lowercase filter (or something like that). In this case you would also add an additional caching to the top of the stream without really needing it.
Because of this, the marker-interface method would not do it, too, only something like isRewindable() or isCachingTokens would do it (if Filters pass it up to their input). So as far as one filter would cache tokens, you could detect it even on the top stream.
This is the same like the well-known InputStream usage:
if (!stream.markSupported) stream=new BufferedInputStream(stream);
. markSupported of Filter streams also pass to their input.
I have other places, where it would be good to know if one stream supports reset() for rewinding (or rewind(), which I would prefer). We had this discussion on java-dev some time ago, about decoupling rewinding from resetting a stream.