| package net.oauth.client; |
| |
| import java.io.BufferedInputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| /** |
| * A decorator that retains a copy of the first few bytes of data. |
| * @hide |
| */ |
| public class ExcerptInputStream extends BufferedInputStream |
| { |
| /** |
| * A marker that's appended to the excerpt if it's less than the complete |
| * stream. |
| */ |
| public static final byte[] ELLIPSIS = " ...".getBytes(); |
| |
| public ExcerptInputStream(InputStream in) throws IOException { |
| super(in); |
| mark(LIMIT); |
| int total = 0; |
| int read; |
| while ((read = read(excerpt, total, LIMIT - total)) != -1 && ((total += read) < LIMIT)); |
| if (total == LIMIT) { |
| // Only add the ellipsis if there are at least LIMIT bytes |
| System.arraycopy(ELLIPSIS, 0, excerpt, total, ELLIPSIS.length); |
| } else { |
| byte[] tmp = new byte[total]; |
| System.arraycopy(excerpt, 0, tmp, 0, total); |
| excerpt = tmp; |
| } |
| reset(); |
| } |
| |
| private static final int LIMIT = 1024; |
| private byte[] excerpt = new byte[LIMIT + ELLIPSIS.length]; |
| |
| /** The first few bytes of data, plus ELLIPSIS if there are more bytes. */ |
| public byte[] getExcerpt() |
| { |
| return excerpt; |
| } |
| |
| } |