I started out doing that, but as far as I could tell the default implementations of skip call read() repeatedly until EOF anyway - so it would just be repeating the code.
As to FileInputStream, I noticed that when I was trying to set up a test.
I've just confirmed that the behaviour is due to skip() rather than read() - in other words it overrides the default skip() implementation.
So yes, it would after all be useful to have a "proper" skip implementation that cannot be overridden.
How should count < 0 be handled?
At present Reader throws IAE, but InputStream just returns. I'd prefer to see IAE for both.