All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.groupbyinc.common.util.stream.RestrictedInputStream Maven / Gradle / Ivy

There is a newer version: 198
Show newest version
package com.groupbyinc.common.util.stream;

import java.io.IOException;
import java.io.InputStream;

/**
 * Restricted {@link InputStream}
 * - throw {@link IOException} when original {@link InputStream} exceeds maximum size in bytes
 *
 * @author Alan Czajkowski
 */
public class RestrictedInputStream extends InputStream {

  public static final String EXCEEDED_MAX_BYTES = "InputStream exceeded maximum byte size";

  private final InputStream original;

  private final long maxBytes;

  private long totalBytesRead;

  public RestrictedInputStream(InputStream original, long maxBytes) {
    this.original = original;
    this.maxBytes = maxBytes;
  }

  @Override
  public int read() throws IOException {
    int b = original.read();
    if (b >= 0) {
      incrementByteCounter(1);
    }
    return b;
  }

  @Override
  public int read(byte b[]) throws IOException {
    return read(b, 0, b.length);
  }

  @Override
  public int read(byte b[], int off, int len) throws IOException {
    int bytesRead = original.read(b, off, len);
    if (bytesRead >= 0) {
      incrementByteCounter(bytesRead);
    }
    return bytesRead;
  }

  private void incrementByteCounter(int bytesRead) throws IOException {
    totalBytesRead += bytesRead;
    if (totalBytesRead > maxBytes) {
      throw new IOException(EXCEEDED_MAX_BYTES + ": " + maxBytes);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy