1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.io;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20a1603838fe9e865575c87982e32c6343740e464cElliott Hughesimport java.util.Arrays;
21a1603838fe9e865575c87982e32c6343740e464cElliott Hughes
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A specialized {@link OutputStream} for class for writing content to an
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (internal) byte array. As bytes are written to this stream, the byte array
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * may be expanded to hold more bytes. When the writing is considered to be
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * finished, a copy of the byte array can be requested from the class.
27f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson *
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see ByteArrayInputStream
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ByteArrayOutputStream extends OutputStream {
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The byte array containing the bytes written.
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected byte[] buf;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The number of bytes written.
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected int count;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new ByteArrayOutputStream with a default size of 32 bytes.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If more than 32 bytes are written to this instance, the underlying byte
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * array will expand.
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public ByteArrayOutputStream() {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf = new byte[32];
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code ByteArrayOutputStream} with a default size of
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code size} bytes. If more than {@code size} bytes are written to this
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * instance, the underlying byte array will expand.
54f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param size
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            initial size for the underlying byte array, must be
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            non-negative.
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code size} < 0.
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public ByteArrayOutputStream(int size) {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (size >= 0) {
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            buf = new byte[size];
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
65b1396870f92135aa140bd2b86221768dea5bc11dElliott Hughes            throw new IllegalArgumentException("size < 0");
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Closes this stream. This releases system resources used for this stream.
71f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if an error occurs while attempting to close this stream.
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void close() throws IOException {
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /**
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * Although the spec claims "A closed stream cannot perform output
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * operations and cannot be reopened.", this implementation must do
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         * nothing.
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         */
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.close();
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void expand(int i) {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        /* Can the buffer handle @i more bytes, if not expand it */
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (count + i <= buf.length) {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] newbuf = new byte[(count + i) * 2];
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        System.arraycopy(buf, 0, newbuf, 0, count);
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf = newbuf;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Resets this stream to the beginning of the underlying byte array. All
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * subsequent writes will overwrite any bytes previously stored in this
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * stream.
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public synchronized void reset() {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        count = 0;
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the total number of bytes written to this stream so far.
107f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the number of bytes written to this stream.
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int size() {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return count;
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the contents of this ByteArrayOutputStream as a byte array. Any
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changes made to the receiver after returning will not be reflected in the
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * byte array returned to the caller.
118f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this stream's current contents as a byte array.
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public synchronized byte[] toByteArray() {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte[] newArray = new byte[count];
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        System.arraycopy(buf, 0, newArray, 0, count);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return newArray;
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the contents of this ByteArrayOutputStream as a string. Any
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changes made to the receiver after returning will not be reflected in the
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * string returned to the caller.
131f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this stream's current contents as a string.
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new String(buf, 0, count);
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the contents of this ByteArrayOutputStream as a string. Each byte
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code b} in this stream is converted to a character {@code c} using the
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * following function:
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code c == (char)(((hibyte & 0xff) << 8) | (b & 0xff))}. This method is
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * deprecated and either {@link #toString()} or {@link #toString(String)}
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * should be used.
147f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param hibyte
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the high byte of each resulting Unicode character.
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this stream's current contents as a string with the high byte set
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         to {@code hibyte}.
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @deprecated Use {@link #toString()}.
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Deprecated
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString(int hibyte) {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] newBuf = new char[size()];
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < newBuf.length; i++) {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            newBuf[i] = (char) (((hibyte & 0xff) << 8) | (buf[i] & 0xff));
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return new String(newBuf);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the contents of this ByteArrayOutputStream as a string converted
1659b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes     * according to the encoding declared in {@code charsetName}.
166f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
1679b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes     * @param charsetName
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a string representing the encoding to use when translating
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            this stream to a string.
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this stream's current contents as an encoded string.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws UnsupportedEncodingException
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the provided encoding is not supported.
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1749b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes    public String toString(String charsetName) throws UnsupportedEncodingException {
1759b9e9145bc55a47be42a9d3f7ecc9f6b533739b2Elliott Hughes        return new String(buf, 0, count, charsetName);
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes {@code count} bytes from the byte array {@code buffer} starting at
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset {@code index} to this stream.
181f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param buffer
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the buffer to be written.
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param offset
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the initial position in {@code buffer} to retrieve bytes.
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param len
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of bytes of {@code buffer} to write.
188f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @throws NullPointerException
189f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *             if {@code buffer} is {@code null}.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IndexOutOfBoundsException
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code offset < 0} or {@code len < 0}, or if
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code offset + len} is greater than the length of
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             {@code buffer}.
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public synchronized void write(byte[] buffer, int offset, int len) {
197a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(buffer.length, offset, len);
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (len == 0) {
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        expand(len);
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        System.arraycopy(buffer, offset, buf, this.count, len);
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.count += len;
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the specified byte {@code oneByte} to the OutputStream. Only the
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * low order byte of {@code oneByte} is written.
209f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param oneByte
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the byte to be written.
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public synchronized void write(int oneByte) {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (count == buf.length) {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            expand(1);
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
218f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson        buf[count++] = (byte) oneByte;
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Takes the contents of this stream and writes it to the output stream
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code out}.
224f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param out
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            an OutputStream on which to write the contents of this stream.
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IOException
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if an error occurs while writing to {@code out}.
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public synchronized void writeTo(OutputStream out) throws IOException {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        out.write(buf, 0, count);
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
234