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;
}
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;
}
}
Aggregations