CountingInputStream is only partially synchronized.
The count is not synchronized when it is updated in read operations, so is not guaranteed to be published correctly
The synchronization could be removed without loss of functionality.
Not sure it makes sense to share a stream between threads anyway, as the underlying stream is unlikely to be thread-safe.
If only one thread reads the stream, then the count field could be made volatile.
This would allow other threads to read the count safely.