1package net.oauth.client;
2
3import java.io.BufferedInputStream;
4import java.io.IOException;
5import java.io.InputStream;
6
7/**
8 * A decorator that retains a copy of the first few bytes of data.
9 * @hide
10 */
11public class ExcerptInputStream extends BufferedInputStream
12{
13    /**
14     * A marker that's appended to the excerpt if it's less than the complete
15     * stream.
16     */
17    public static final byte[] ELLIPSIS = " ...".getBytes();
18
19    public ExcerptInputStream(InputStream in) throws IOException {
20        super(in);
21        mark(LIMIT);
22        int total = 0;
23        int read;
24        while ((read = read(excerpt, total, LIMIT - total)) != -1 && ((total += read) < LIMIT));
25        if (total == LIMIT) {
26            // Only add the ellipsis if there are at least LIMIT bytes
27            System.arraycopy(ELLIPSIS, 0, excerpt, total, ELLIPSIS.length);
28        } else {
29            byte[] tmp = new byte[total];
30            System.arraycopy(excerpt, 0, tmp, 0, total);
31            excerpt = tmp;
32        }
33        reset();
34    }
35
36    private static final int LIMIT = 1024;
37    private byte[] excerpt = new byte[LIMIT + ELLIPSIS.length];
38
39    /** The first few bytes of data, plus ELLIPSIS if there are more bytes. */
40    public byte[] getExcerpt()
41    {
42        return excerpt;
43    }
44
45}
46