| package org.bouncycastle.util.io; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| |
| public final class Streams |
| { |
| private static int BUFFER_SIZE = 512; |
| |
| public static void drain(InputStream inStr) |
| throws IOException |
| { |
| byte[] bs = new byte[BUFFER_SIZE]; |
| while (inStr.read(bs, 0, bs.length) >= 0) |
| { |
| } |
| } |
| |
| public static byte[] readAll(InputStream inStr) |
| throws IOException |
| { |
| ByteArrayOutputStream buf = new ByteArrayOutputStream(); |
| pipeAll(inStr, buf); |
| return buf.toByteArray(); |
| } |
| |
| public static byte[] readAllLimited(InputStream inStr, int limit) |
| throws IOException |
| { |
| ByteArrayOutputStream buf = new ByteArrayOutputStream(); |
| pipeAllLimited(inStr, limit, buf); |
| return buf.toByteArray(); |
| } |
| |
| public static int readFully(InputStream inStr, byte[] buf) |
| throws IOException |
| { |
| return readFully(inStr, buf, 0, buf.length); |
| } |
| |
| public static int readFully(InputStream inStr, byte[] buf, int off, int len) |
| throws IOException |
| { |
| int totalRead = 0; |
| while (totalRead < len) |
| { |
| int numRead = inStr.read(buf, off + totalRead, len - totalRead); |
| if (numRead < 0) |
| { |
| break; |
| } |
| totalRead += numRead; |
| } |
| return totalRead; |
| } |
| |
| public static void pipeAll(InputStream inStr, OutputStream outStr) |
| throws IOException |
| { |
| byte[] bs = new byte[BUFFER_SIZE]; |
| int numRead; |
| while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) |
| { |
| outStr.write(bs, 0, numRead); |
| } |
| } |
| |
| public static long pipeAllLimited(InputStream inStr, long limit, OutputStream outStr) |
| throws IOException |
| { |
| long total = 0; |
| byte[] bs = new byte[BUFFER_SIZE]; |
| int numRead; |
| while ((numRead = inStr.read(bs, 0, bs.length)) >= 0) |
| { |
| total += numRead; |
| if (total > limit) |
| { |
| throw new StreamOverflowException("Data Overflow"); |
| } |
| outStr.write(bs, 0, numRead); |
| } |
| return total; |
| } |
| } |