1 package org.bouncycastle.util.io; 2 3 import java.io.ByteArrayOutputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 8 public final class Streams 9 { 10 private static int BUFFER_SIZE = 512; 11 drain(InputStream inStr)12 public static void drain(InputStream inStr) 13 throws IOException 14 { 15 byte[] bs = new byte[BUFFER_SIZE]; 16 while (inStr.read(bs, 0, bs.length) >= 0) 17 { 18 } 19 } 20 readAll(InputStream inStr)21 public static byte[] readAll(InputStream inStr) 22 throws IOException 23 { 24 ByteArrayOutputStream buf = new ByteArrayOutputStream(); 25 pipeAll(inStr, buf); 26 return buf.toByteArray(); 27 } 28 readAllLimited(InputStream inStr, int limit)29 public static byte[] readAllLimited(InputStream inStr, int limit) 30 throws IOException 31 { 32 ByteArrayOutputStream buf = new ByteArrayOutputStream(); 33 pipeAllLimited(inStr, limit, buf); 34 return buf.toByteArray(); 35 } 36 readFully(InputStream inStr, byte[] buf)37 public static int readFully(InputStream inStr, byte[] buf) 38 throws IOException 39 { 40 return readFully(inStr, buf, 0, buf.length); 41 } 42 readFully(InputStream inStr, byte[] buf, int off, int len)43 public static int readFully(InputStream inStr, byte[] buf, int off, int len) 44 throws IOException 45 { 46 int totalRead = 0; 47 while (totalRead < len) 48 { 49 int numRead = inStr.read(buf, off + totalRead, len - totalRead); 50 if (numRead < 0) 51 { 52 break; 53 } 54 totalRead += numRead; 55 } 56 return totalRead; 57 } 58 pipeAll(InputStream inStr, OutputStream outStr)59 public static void pipeAll(InputStream inStr, OutputStream outStr) 60 throws IOException 61 { 62 byte[] bs = new byte[BUFFER_SIZE]; 63 int numRead; 64 while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) 65 { 66 outStr.write(bs, 0, numRead); 67 } 68 } 69 pipeAllLimited(InputStream inStr, long limit, OutputStream outStr)70 public static long pipeAllLimited(InputStream inStr, long limit, OutputStream outStr) 71 throws IOException 72 { 73 long total = 0; 74 byte[] bs = new byte[BUFFER_SIZE]; 75 int numRead; 76 while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) 77 { 78 total += numRead; 79 if (total > limit) 80 { 81 throw new StreamOverflowException("Data Overflow"); 82 } 83 outStr.write(bs, 0, numRead); 84 } 85 return total; 86 } 87 } 88