> I mean intuitively shouldn't toString() on a stream get back a string?
Yes it should return a String (enforced by polymorphism) but not the String you imply.
From the API
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read.
So your String should be a description of the InputStream, not its contents.
For example: "InputStream for URL: http://google.com/" or whatever satisfies the concise informative representation that is easy for a person to read.