Search in sources :

Example 11 with StreamCopyException

use of org.apache.axiom.ext.io.StreamCopyException in project webservices-axiom by apache.

the class MemoryBlob method readFrom.

@Override
public long readFrom(InputStream in, long length, boolean commit) throws StreamCopyException {
    if (data == null) {
        init();
    }
    if (length == -1) {
        length = Long.MAX_VALUE;
    }
    long bytesReceived = 0;
    // Now directly write to the buffers
    boolean done = false;
    while (!done) {
        // Don't get more than will fit in the current buffer
        int len = (int) Math.min(BUFFER_SIZE - index, length - bytesReceived);
        // Now get the bytes
        int bytesRead;
        try {
            bytesRead = in.read(currBuffer, index, len);
        } catch (IOException ex) {
            throw new StreamCopyException(StreamCopyException.READ, ex);
        }
        if (bytesRead >= 0) {
            bytesReceived += bytesRead;
            index += bytesRead;
            if (index >= BUFFER_SIZE) {
                addBuffer();
            }
            if (bytesReceived >= length) {
                done = true;
            }
        } else {
            done = true;
        }
    }
    committed = commit;
    return bytesReceived;
}
Also used : StreamCopyException(org.apache.axiom.ext.io.StreamCopyException) IOException(java.io.IOException)

Example 12 with StreamCopyException

use of org.apache.axiom.ext.io.StreamCopyException in project webservices-axiom by apache.

the class IOUtils method copy.

/**
 * Copy bytes between streams. This method supports the {@link ReadFromSupport} interface. It
 * will not call {@link Closeable#close()} on either of the two streams.
 *
 * @param in
 *            the stream to read bytes from
 * @param out
 *            the stream to write bytes to
 * @param length
 *            the maximum number of bytes to copy, or -1 to copy an unlimited number of bytes
 * @return the number of bytes copied
 * @throws StreamCopyException
 *             if a read/write operation on one of the streams triggered an {@link IOException}
 */
public static long copy(InputStream in, OutputStream out, long length) throws StreamCopyException {
    if (out instanceof ReadFromSupport) {
        return ((ReadFromSupport) out).readFrom(in, length);
    } else {
        byte[] buffer = new byte[4096];
        long read = 0;
        long toRead = length == -1 ? Long.MAX_VALUE : length;
        while (toRead > 0) {
            int c;
            try {
                c = in.read(buffer, 0, (int) Math.min(toRead, buffer.length));
            } catch (IOException ex) {
                throw new StreamCopyException(StreamCopyException.READ, ex);
            }
            if (c == -1) {
                break;
            }
            try {
                out.write(buffer, 0, c);
            } catch (IOException ex) {
                throw new StreamCopyException(StreamCopyException.WRITE, ex);
            }
            read += c;
            toRead -= c;
        }
        return read;
    }
}
Also used : ReadFromSupport(org.apache.axiom.ext.io.ReadFromSupport) StreamCopyException(org.apache.axiom.ext.io.StreamCopyException) IOException(java.io.IOException)

Aggregations

StreamCopyException (org.apache.axiom.ext.io.StreamCopyException)12 IOException (java.io.IOException)10 NullInputStream (org.apache.commons.io.input.NullInputStream)2 FileOutputStream (java.io.FileOutputStream)1 MemoryBlob (org.apache.axiom.blob.MemoryBlob)1 ReadFromSupport (org.apache.axiom.ext.io.ReadFromSupport)1 OMException (org.apache.axiom.om.OMException)1 ExceptionInputStream (org.apache.axiom.testutils.io.ExceptionInputStream)1 ExceptionOutputStream (org.apache.axiom.testutils.io.ExceptionOutputStream)1