This is some code I wrote to slurp bytes out of an InputStream such as might come back via request.getInputStream(). I show this as a private, helper method inside another class since that's how I used it.
Inside this codeIn terms of beginning Java samples you have:
|
|
Eclipse tip: Call HierarchyDouble-click in the editor to highlight a method, then hold down the Crtl and Alt buttons while typing an 'h' to see, in the Call Hierarchy pane, other methods that call this one. |
Note that some stream handlers don't require such intermediary. For example:
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.JDomDriver; ... void someMethod( InputStream is ) { XStream xs - new XStream( new JDomDriver() ); ... xs.alias( method, whichClass ); String string = ( String ) xs.fromXML( is ); ... }
Here's a solution:
package com.etretatlogiciels.samples.streams; import java.io.InputStream; import java.lang.StringBuffer; import java.io.IOException; public class SomeClass { . . . /** * This sips at a stream turning the whole thing into a String. * * @param in - the in-coming stream (InputStream) * @return a new string with the contents of the input stream (String) * @throws IOException */ private static String slurp( InputStream in ) throws IOException { int n = 0; StringBuffer out = new StringBuffer(); byte[] b = new byte[ 4096 ]; while( ( n = in.read( b ) ) != -1 ) out.append( new String( b, 0, n ) ); return out.toString(); } . . . }
package com.etretatlogiciels.utilities; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class StreamUtilities { /** * "Slurp" all the bytes on the stream into a string and return it. * @param is the input stream. * @param bufferSize pass -1 if you don't care how much is read at a time. * @return the bytes in the stream as a string. * @throws IOException */ public static String slurp( final InputStream is, final int bufferSize ) throws IOException { int howMuch = ( bufferSize == -1 ) ? 4096 : bufferSize; final char[] buffer = new char[ howMuch ]; final StringBuilder out = new StringBuilder(); final Reader in = new InputStreamReader( is, "UTF-8" ); for( ; ; ) { int chunkLength = in.read( buffer, 0, buffer.length ); if( chunkLength < 0 ) break; out.append( buffer, 0, chunkLength ); } return out.toString(); } /** * Slurp the stream and upon any error, just return null. * @param stream input stream, presumably non-empty. * @return what's in it. */ public static String slurpTheStream( InputStream stream ) { if( stream == null ) return null; String whatsInTheStream; try { whatsInTheStream = StreamUtilities.slurp( stream, -1 ); } catch( IOException e ) { return null; } return whatsInTheStream; } }