I believe open streams cause memory leak in java (at least java 1.6 and earlier did had this problem).
But, while searching (even here), I found some people agreein
The answer depends on the stream.
A memory leak is simply a situation where you keep around things that you didn't intend to. This is always due to a programming error: someone somewhere forgot to release ("detach" from all strong references) some instances. These add up over time and then you notice the "leak". A cache that grows indefinitely is a good example.
A stream, for example, could place some data into a shared container (typically static) like a resource lock, some kind of cache, etc. as soon as it is open/used. And then it cleans up this resource in the close method. So skipping this last part does create a memory leak.
In your example the ByteArrayInputStream.close() method does nothing, so no problem there. BufferedInputStream.close() just delegates the call to the wrapped class so, in this case, again there is no problem.
More complex streams dealing with files, network streams can create leaks if not closed but it is not common. I'm assuming that the stream itself is not kept around but left available for collection. In many situations, a "smart" stream may even fix these oversights during its own collection and perform the necessary cleanup by itself (this remains an anomalous situation that the stream should clearly log/notify somewhere).