javabytebytearrayinputstream

Why to use ByteArrayInputStream rather than byte[] in Java


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?


Solution

  • 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: