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