Copiar InputStream, interromper a operação se o tamanho exceder o limite

Eu tentei copiar um InputStream para um arquivo e abortar a cópia se o tamanho de InputStream for maior que 1 MB. Em Java7, escrevi o código como abaixo:

public void copy(InputStream input, Path target) {
    OutputStream out = Files.newOutputStream(target,
            StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
    boolean isExceed = false;
    try {
        long nread = 0L;
        byte[] buf = new byte[BUFFER_SIZE];
        int n;
        while ((n = input.read(buf)) > 0) {
            out.write(buf, 0, n);
            nread += n;
            if (nread > 1024 * 1024) {// Exceed 1 MB
                isExceed = true;
                break;
            }
        }
    } catch (IOException ex) {
        throw ex;
    } finally {
        out.close();
        if (isExceed) {// Abort the copy
            Files.deleteIfExists(target);
            throw new IllegalArgumentException();
        }
    }}
Primeira pergunta: existe alguma solução melhor para isso?Segunda pergunta: minha outra solução - Antes da operação de cópia, eu calculo o tamanho deste InputStream. Então eu copio o InputStream paraByteArrayOutputStream então peguesize(). Mas o problema é que o InputStream pode nãomarkSupported(), portanto, o InputStream não pode ser reutilizado em uma operação de arquivo de cópia.

questionAnswers(4)

yourAnswerToTheQuestion