X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FIOUtils.java;h=f857850dea11db8d4185fd21ad226b86380cc034;hp=973a61b0da541362a9a44069555bbe42a5adfb45;hb=805005449dacb1e7b825db63836bf100e472ddd0;hpb=f4053377fa15da2f11e82955bfab86e673fa371c diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index 973a61b..f857850 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -1,6 +1,7 @@ package be.nikiroo.utils; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -246,4 +247,69 @@ public class IOUtils { return loader.getResourceAsStream(name); } + + /** + * Return a resetable {@link InputStream} from this stream, and reset it. + * + * @param in + * the input stream + * @return the resetable stream, which may be the same + * + * @throws IOException + * in case of I/O error + */ + public static InputStream forceResetableStream(InputStream in) + throws IOException { + MarkableFileInputStream tmpIn = null; + File tmp = null; + + boolean resetable = in.markSupported(); + if (resetable) { + try { + in.reset(); + } catch (IOException e) { + resetable = false; + } + } + + if (resetable) { + return in; + } + + tmp = File.createTempFile(".tmp-stream", ".tmp"); + try { + write(in, tmp); + tmpIn = new MarkableFileInputStream(new FileInputStream(tmp)); + return tmpIn; + } finally { + try { + if (tmpIn != null) { + tmpIn.close(); + } + } finally { + tmp.delete(); + } + } + } + + /** + * Convert the {@link InputStream} into a byte array. + * + * @param in + * the input stream + * + * @return the array + * + * @throws IOException + * in case of I/O error + */ + public static byte[] toByteArray(InputStream in) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + write(in, out); + + byte[] array = out.toByteArray(); + out.close(); + + return array; + } }