Copie InputStream, cancele la operación si el tamaño excede el límite

Intenté copiar un InputStream en un archivo y abortar la copia si el tamaño de InputStream es superior a 1 MB. En Java7, escribí el código de la siguiente manera:

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();
        }
    }}
Primera pregunta: ¿hay alguna solución mejor para eso?Segunda pregunta: mi otra solución: antes de la operación de copia, calculo el tamaño de este InputStream. Así que copio el InputStream aByteArrayOutputStream entonces consiguesize(). Pero el problema es que InputStream no puedemarkSupported(), por lo que el InputStream no se puede reutilizar en una operación de copia de archivos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta