@@ -435,6 +435,32 @@ public static InputStream toBufferedInputStream(final InputStream input) throws
435435 return ByteArrayOutputStream .toBufferedInputStream (input );
436436 }
437437
438+ /**
439+ * Fetches entire contents of an <code>InputStream</code> and represent
440+ * same data as result InputStream.
441+ * <p>
442+ * This method is useful where,
443+ * <ul>
444+ * <li>Source InputStream is slow.</li>
445+ * <li>It has network resources associated, so we cannot keep it open for
446+ * long time.</li>
447+ * <li>It has network timeout associated.</li>
448+ * </ul>
449+ * It can be used in favor of {@link #toByteArray(InputStream)}, since it
450+ * avoids unnecessary allocation and copy of byte[].<br>
451+ * This method buffers the input internally, so there is no need to use a
452+ * <code>BufferedInputStream</code>.
453+ *
454+ * @param input Stream to be fully buffered.
455+ * @param size the initial buffer size
456+ * @return A fully buffered stream.
457+ * @throws IOException if an I/O error occurs
458+ * @since 2.5
459+ */
460+ public static InputStream toBufferedInputStream (final InputStream input , int size ) throws IOException {
461+ return ByteArrayOutputStream .toBufferedInputStream (input , size );
462+ }
463+
438464 /**
439465 * Returns the given reader if it is a {@link BufferedReader}, otherwise creates a BufferedReader from the given
440466 * reader.
@@ -450,6 +476,22 @@ public static BufferedReader toBufferedReader(final Reader reader) {
450476 return reader instanceof BufferedReader ? (BufferedReader ) reader : new BufferedReader (reader );
451477 }
452478
479+ /**
480+ * Returns the given reader if it is a {@link BufferedReader}, otherwise creates a BufferedReader from the given
481+ * reader.
482+ *
483+ * @param reader
484+ * the reader to wrap or return (not null)
485+ * @param size the buffer size, if a new BufferedReader is created.
486+ * @return the given reader or a new {@link BufferedReader} for the given reader
487+ * @since 2.5
488+ * @see #buffer(Reader)
489+ * @throws NullPointerException if the input parameter is null
490+ */
491+ public static BufferedReader toBufferedReader (final Reader reader , int size ) {
492+ return reader instanceof BufferedReader ? (BufferedReader ) reader : new BufferedReader (reader , size );
493+ }
494+
453495 /**
454496 * Returns the given reader if it is already a {@link BufferedReader}, otherwise creates a BufferedReader from the given
455497 * reader.
@@ -464,6 +506,21 @@ public static BufferedReader buffer(final Reader reader) {
464506 return reader instanceof BufferedReader ? (BufferedReader ) reader : new BufferedReader (reader );
465507 }
466508
509+ /**
510+ * Returns the given reader if it is already a {@link BufferedReader}, otherwise creates a BufferedReader from the given
511+ * reader.
512+ *
513+ * @param reader
514+ * the reader to wrap or return (not null)
515+ * @param size the buffer size, if a new BufferedReader is created.
516+ * @return the given reader or a new {@link BufferedReader} for the given reader
517+ * @since 2.5
518+ * @throws NullPointerException if the input parameter is null
519+ */
520+ public static BufferedReader buffer (final Reader reader , int size ) {
521+ return reader instanceof BufferedReader ? (BufferedReader ) reader : new BufferedReader (reader , size );
522+ }
523+
467524 /**
468525 * Returns the given Writer if it is already a {@link BufferedWriter}, otherwise creates a BufferedWriter from the given
469526 * Writer.
@@ -478,6 +535,21 @@ public static BufferedWriter buffer(final Writer writer) {
478535 return writer instanceof BufferedWriter ? (BufferedWriter ) writer : new BufferedWriter (writer );
479536 }
480537
538+ /**
539+ * Returns the given Writer if it is already a {@link BufferedWriter}, otherwise creates a BufferedWriter from the given
540+ * Writer.
541+ *
542+ * @param writer
543+ * the Writer to wrap or return (not null)
544+ * @param size the buffer size, if a new BufferedWriter is created.
545+ * @return the given Writer or a new {@link BufferedWriter} for the given Writer
546+ * @since 2.5
547+ * @throws NullPointerException if the input parameter is null
548+ */
549+ public static BufferedWriter buffer (final Writer writer , int size ) {
550+ return writer instanceof BufferedWriter ? (BufferedWriter ) writer : new BufferedWriter (writer , size );
551+ }
552+
481553 /**
482554 * Returns the given OutputStream if it is already a {@link BufferedOutputStream}, otherwise creates a BufferedOutputStream from the given
483555 * OutputStream.
@@ -496,6 +568,25 @@ public static BufferedOutputStream buffer(final OutputStream outputStream) {
496568 return outputStream instanceof BufferedOutputStream ? (BufferedOutputStream ) outputStream : new BufferedOutputStream (outputStream );
497569 }
498570
571+ /**
572+ * Returns the given OutputStream if it is already a {@link BufferedOutputStream}, otherwise creates a BufferedOutputStream from the given
573+ * OutputStream.
574+ *
575+ * @param outputStream
576+ * the OutputStream to wrap or return (not null)
577+ * @param size the buffer size, if a new BufferedOutputStream is created.
578+ * @return the given OutputStream or a new {@link BufferedOutputStream} for the given OutputStream
579+ * @since 2.5
580+ * @throws NullPointerException if the input parameter is null
581+ */
582+ public static BufferedOutputStream buffer (final OutputStream outputStream , int size ) {
583+ // reject null early on rather than waiting for IO operation to fail
584+ if (outputStream == null ) { // not checked by BufferedOutputStream
585+ throw new NullPointerException ();
586+ }
587+ return outputStream instanceof BufferedOutputStream ? (BufferedOutputStream ) outputStream : new BufferedOutputStream (outputStream , size );
588+ }
589+
499590 /**
500591 * Returns the given InputStream if it is already a {@link BufferedInputStream}, otherwise creates a BufferedInputStream from the given
501592 * InputStream.
@@ -514,6 +605,25 @@ public static BufferedInputStream buffer(final InputStream inputStream) {
514605 return inputStream instanceof BufferedInputStream ? (BufferedInputStream ) inputStream : new BufferedInputStream (inputStream );
515606 }
516607
608+ /**
609+ * Returns the given InputStream if it is already a {@link BufferedInputStream}, otherwise creates a BufferedInputStream from the given
610+ * InputStream.
611+ *
612+ * @param inputStream
613+ * the InputStream to wrap or return (not null)
614+ * @param size the buffer size, if a new BufferedInputStream is created.
615+ * @return the given InputStream or a new {@link BufferedInputStream} for the given InputStream
616+ * @since 2.5
617+ * @throws NullPointerException if the input parameter is null
618+ */
619+ public static BufferedInputStream buffer (final InputStream inputStream , int size ) {
620+ // reject null early on rather than waiting for IO operation to fail
621+ if (inputStream == null ) { // not checked by BufferedInputStream
622+ throw new NullPointerException ();
623+ }
624+ return inputStream instanceof BufferedInputStream ? (BufferedInputStream ) inputStream : new BufferedInputStream (inputStream , size );
625+ }
626+
517627 // read toByteArray
518628 //-----------------------------------------------------------------------
519629 /**
0 commit comments