CSR :
|
Summary ------- Override readAllBytes, readNBytes, and transferTo in ByteArrayInputStream. Problem ------- The methods readAllBytes, readNBytes, and transferTo were added to InputStream in JDK 9. When invoked on a ByteArrayInputStream however their implementations will be less efficient that if the internal byte array were used directly. Solution -------- Override readAllBytes, readNBytes, and transferTo in ByteArrayInputStream to use the internal byte array directly. Specification ------------- Overrides in `java.io.ByteArrayInputStream`: ``` /** * Reads all remaining bytes from the input stream. This method does not * block. This method does not close the input stream. * * When this stream reaches end of stream, further invocations of this * method will return an empty byte array. * * @throws OutOfMemoryError {@inheritDoc} * * @return {@inheritDoc} * * @since 10 */ public byte[] readAllBytes() {} ``` ``` /** * Reads the requested number of bytes from the input stream into the * given byte array. This method does not close the input stream. When * this stream reaches end of stream, further invocations of this method * will return zero. * * @apiNote * The {@code readNBytes(b, off, len)} method for this * class has the same effect as {@link #read(byte[],int,int) * read(b, off, len)} except that zero will be returned instead of * {@code -1} at end of stream. * * @param b {@inheritDoc} * @param off {@inheritDoc} * @param len {@inheritDoc} * @return {@inheritDoc} * @throws NullPointerException {@inheritDoc} * @throws IndexOutOfBoundsException {@inheritDoc} * * @since 10 */ public int readNBytes(byte[] b, int off, int len) {} ``` ``` /** * Reads the remaining bytes from this input stream and writes the bytes * to the given output stream in the order that they were read. On return, * this input stream will be at end of stream. This method does not close * the output stream. * <p> * This method may block indefinitely writing to the output stream. The * behavior for the case where the output stream is <i>asynchronously * closed</i>, or the thread is interrupted during the transfer, is highly * output stream specific, and therefore not specified. * <p> * If an I/O error occurs writing to the output stream, then it may do so * after some bytes have been written. Consequently the input stream may * not be at end of stream and one, or both, streams may be in an * inconsistent state. It is strongly recommended that the output stream * be promptly closed if an I/O error occurs. * * @param out {@inheritDoc} * @return {@inheritDoc} * @throws IOException if an I/O error occurs when writing * @throws NullPointerException {@inheritDoc} * * @since 10 */ public long transferTo(OutputStream out) throws IOException {} ```