As I understand ByteArrayInputStream
is used to read byte[]
data.
Why should I use it rather than simple byte[]
(for example reading it from DB).
What is the different between them?
If the input is always a byte[]
, then you're right, there's often no need for the stream. And if you don't need it, don't use it. One additional advantage of a ByteArrayInputStream is that it serves as a very strong indication that you intend the bytes to be read-only (since the stream doesn't provide an interface for changing them), though it's important to note that a programmer can often still access the bytes directly, so you shouldn't use that in a situation where security is a concern.
But if it's sometimes a byte[]
, sometimes a file, sometimes a network connection, etc, then you need some sort of abstraction for "a stream of bytes, and I don't care where they come from." That's what an InputStream is. When the source happens to be a byte array, ByteArrayInputStream is a good InputStream to use.
This is helpful in many situations, but to give two concrete examples:
byte[]
in memory, or from some other source. So, you provide an interface that accepts an InputStream
— which means that if what they have is a byte[]
, they need to wrap it in a ByteArrayInputStream.