jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jukka Zitting" <jukka.zitt...@gmail.com>
Subject Re: Retrieving binary content
Date Tue, 28 Nov 2006 11:29:28 GMT
Hi,

On 11/28/06, Ted Roeloffzen <ted.roeloffzen@gmail.com> wrote:
> > A common pattern I use when processing stream data is:
> >
> >    InputStream data = ...;
> >    try {
> >        byte[] buffer = new byte[BUFFER_SIZE];
> >        for (int n = data.read(buffer); n != -1; n = data.read(buffer)) {
> >            // process n bytes of data in buffer
> >        }
> >    } finally {
> >        data.close();
> >    }
>
> When I do this, i need to know how large the buffer needs to be, but i don't
> know how big it is. Is there a way to go around that?

The for loop is designed to read the stream in blocks. For example, you can use:

    private static final int BUFFER_SIZE = 1000;

... in which case the stream is read in blocks of up to a thousand
bytes. Each iteration of the for loop body will process a block of n
bytes stored in the allocated buffer.

For example if you want to store the image in a file or send it over
the network, you can do that by by writing the byte blocks to a
respective OutputStream, like this:

    InputStream data = ...;
    try {
        OutputStream destination = ...;
        try {
            byte[] buffer = new byte[BUFFER_SIZE];
            for (int n = data.read(buffer); n != -1; n = data.read(buffer)) {
                destination.write(buffer, 0, n);
            }
        } finally {
            destination.close();
        }
    } finally {
        data.close();
    }

If you need the whole binary stream available in memory as a byte
array, then you can use a ByteArrayOutputStream to accumulate the
data:

    OutputStream destination = new ByteArrayOutputStream();
    InputStream data = ...;
    try {
        byte[] buffer = new byte[BUFFER_SIZE];
        for (int n = data.read(buffer); n != -1; n = data.read(buffer)) {
            destination.write(buffer, 0, n);
        }
    } finally {
        data.close();
    }
    byte[] bytes = destination.toByteArray();

I hope this helps! See
http://java.sun.com/docs/books/tutorial/essential/io/bytestreams.html
and the related documentation for more information.

BR,

Jukka Zitting

Mime
View raw message