5

Oracle added writeBytes​(byte[] b) method to the ByteArrayOutputStream class since Java 11. This method takes a byte array and writes it to ByteArrayOutputStream. However, ByteArrayOutputStream extends OutputStream class that defines a write​(byte[] b) to do same thing. Why did Java need a new method to do that?

1

2 Answers 2

8

As noted by others, the benefit of the new method is that it isn't declared as throws IOException.

It was added in response to this issue JDK-8180410 "ByteArrayOutputStream should not throw IOExceptions". The stated rationale in the issue is simply that it makes no sense1 to have to write a try ... catch for an exception that will never be thrown. That's it.

They (strictly) didn't need to add it. They added it as a convenience.


1 - As the reporter puts it: "It's contradictive."

Sign up to request clarification or add additional context in comments.

4 Comments

Still entirely pointless AFAICS. If you know you have a ByteArrayOutputStream you know you can call write() without a catch, and so does the compiler, and if you don't know it you can't call writeBytes() anyway.
No, you cannot call write without caching IOException, because IOException is a checked Exception, which must be handled. One could change the signature not to throw it, but that would break backwards compatibility.
@DorianGray - To be clear .... who was your comment addressed to?
@user207421 it was addressed to.
1

ByteArrayOutputStream.writeBytes doesn't throw the unnecessary IOException.

It's a new method specific to the byte array output stream, whereas the other options are inherited from OutputStream and are declared to throw the checked IOException (which is an unnecessary pain to handle if you know you're writing to a byte array output stream - you don't have a network connection to fail or similar)

2 Comments

But what is the point? You can only call it if your reference variable is of type ByteArrayOutputStream, and if it is you can alreay call write() without a catch.
Which write() ? You either have to call a variant which throws a checked exception, or you have to provide the offset and length. writeBytes() mitigates both those issues

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.