1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.nio;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.platform.Endianness;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A buffer for bytes.
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A byte buffer can be created in either one of the following ways:
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <ul>
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>{@link #allocate(int) Allocate} a new byte array and create a buffer
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * based on it;</li>
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>{@link #allocateDirect(int) Allocate} a memory block and create a direct
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer based on it;</li>
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>{@link #wrap(byte[]) Wrap} an existing byte array to create a new
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer.</li>
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </ul>
34d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson *
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
36d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilsonpublic abstract class ByteBuffer extends Buffer implements
37d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson        Comparable<ByteBuffer> {
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates a byte buffer based on a newly allocated byte array.
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param capacity
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the capacity of the new buffer
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the created byte buffer.
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code capacity < 0}.
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ByteBuffer allocate(int capacity) {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (capacity < 0) {
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException();
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return BufferFactory.newByteBuffer(capacity);
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates a direct byte buffer based on a newly allocated memory block.
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param capacity
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the capacity of the new buffer
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the created byte buffer.
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code capacity < 0}.
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ByteBuffer allocateDirect(int capacity) {
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (capacity < 0) {
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException();
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return BufferFactory.newDirectByteBuffer(capacity);
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates a new byte buffer by wrapping the given byte array.
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Calling this method has the same effect as
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code wrap(array, 0, array.length)}.
76d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte array which the new buffer will be based on
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the created byte buffer.
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ByteBuffer wrap(byte[] array) {
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return BufferFactory.newByteBuffer(array);
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Creates a new byte buffer by wrapping the given byte array.
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position will be {@code start}, limit will be
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code start + len}, capacity will be the length of the array.
90d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte array which the new buffer will be based on.
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param start
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the start index, must not be negative and not greater than
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code array.length}.
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param len
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the length, must not be negative and not greater than
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code array.length - start}.
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the created byte buffer.
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if either {@code start} or {@code len} is invalid.
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static ByteBuffer wrap(byte[] array, int start, int len) {
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int length = array.length;
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if ((start < 0) || (len < 0) || ((long) start + (long) len > length)) {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IndexOutOfBoundsException();
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteBuffer buf = BufferFactory.newByteBuffer(array);
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.position = start;
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.limit = start + len;
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return buf;
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The byte order of this buffer, default is {@code BIG_ENDIAN}.
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Endianness order = Endianness.BIG_ENDIAN;
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Constructs a {@code ByteBuffer} with given capacity.
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param capacity
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the capacity of the buffer.
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ByteBuffer(int capacity) {
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(capacity);
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // BEGIN android-added
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        _elementSizeShift = 0;
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // END android-added
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the byte array which this buffer is based on, if there is one.
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the byte array which this buffer is based on.
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if this buffer is based on a read-only array.
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception UnsupportedOperationException
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if this buffer is not based on an array.
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final byte[] array() {
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return protectedArray();
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the offset of the byte array which this buffer is based on, if
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * there is one.
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The offset is the index of the array which corresponds to the zero
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position of the buffer.
153d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the offset of the byte array which this buffer is based on.
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if this buffer is based on a read-only array.
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception UnsupportedOperationException
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if this buffer is not based on an array.
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final int arrayOffset() {
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return protectedArrayOffset();
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // BEGIN android-added
165d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson    @Override
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Object _array() {
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (hasArray()) {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return array();
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return null;
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
173d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson    @Override
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    int _arrayOffset() {
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (hasArray()) {
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return arrayOffset();
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return 0;
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // END android-added
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a char buffer which is based on the remaining content of this
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffer.
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by two, and its mark is not set. The new
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
194d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a char buffer which is based on the content of this byte buffer.
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract CharBuffer asCharBuffer();
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a double buffer which is based on the remaining content of this
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffer.
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by eight, and its mark is not set. The new
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
211d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a double buffer which is based on the content of this byte
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         buffer.
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract DoubleBuffer asDoubleBuffer();
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a float buffer which is based on the remaining content of this
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffer.
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by four, and its mark is not set. The new
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
229d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a float buffer which is based on the content of this byte buffer.
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract FloatBuffer asFloatBuffer();
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a int buffer which is based on the remaining content of this byte
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer.
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by four, and its mark is not set. The new
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
246d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a int buffer which is based on the content of this byte buffer.
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract IntBuffer asIntBuffer();
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a long buffer which is based on the remaining content of this
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffer.
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by eight, and its mark is not set. The new
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
263d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a long buffer which is based on the content of this byte buffer.
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract LongBuffer asLongBuffer();
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a read-only buffer that shares its content with this buffer.
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The returned buffer is guaranteed to be a new instance, even if this
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer is read-only itself. The new buffer's position, limit, capacity
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and mark are the same as this buffer.
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means this
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the new buffer. The two
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's position, limit and mark are independent.
278d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a read-only version of this buffer.
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer asReadOnlyBuffer();
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a short buffer which is based on the remaining content of this
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffer.
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer's position is zero, its limit and capacity is the number
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * of remaining bytes divided by two, and its mark is not set. The new
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's read-only property and byte order are the same as this buffer's.
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer is direct if this byte buffer is direct.
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
295d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a short buffer which is based on the content of this byte buffer.
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ShortBuffer asShortBuffer();
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compacts this byte buffer.
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The remaining bytes will be moved to the head of the
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer, starting from position zero. Then the position is set to
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code remaining()}; the limit is set to capacity; the mark is
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * cleared.
307d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer compact();
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Compares the remaining bytes of this buffer to another byte buffer's
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * remaining bytes.
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param otherBuffer
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            another byte buffer.
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a negative value if this is less than {@code other}; 0 if this
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         equals to {@code other}; a positive value if this is greater
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         than {@code other}.
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ClassCastException
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code other} is not a byte buffer.
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int compareTo(ByteBuffer otherBuffer) {
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining()
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                : otherBuffer.remaining();
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int thisPos = position;
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int otherPos = otherBuffer.position;
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte thisByte, otherByte;
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (compareRemaining > 0) {
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            thisByte = get(thisPos);
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            otherByte = otherBuffer.get(otherPos);
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (thisByte != otherByte) {
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return thisByte < otherByte ? -1 : 1;
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            thisPos++;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            otherPos++;
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            compareRemaining--;
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return remaining() - otherBuffer.remaining();
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a duplicated buffer that shares its content with this buffer.
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The duplicated buffer's position, limit, capacity and mark are the same
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * as this buffer's. The duplicated buffer's read-only property and byte
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * order are the same as this buffer's too.
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
355d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a duplicated buffer that shares its content with this buffer.
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer duplicate();
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Checks whether this byte buffer is equal to another object.
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * If {@code other} is not a byte buffer then {@code false} is returned. Two
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * byte buffers are equal if and only if their remaining bytes are exactly
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the same. Position, limit, capacity and mark are not considered.
366d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param other
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the object to compare with this byte buffer.
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if this byte buffer is equal to {@code other},
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         {@code false} otherwise.
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
372d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson    @Override
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(Object other) {
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(other instanceof ByteBuffer)) {
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteBuffer otherBuffer = (ByteBuffer) other;
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int myPosition = position;
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int otherPosition = otherBuffer.position;
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean equalSoFar = true;
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            equalSoFar = get(myPosition++) == otherBuffer.get(otherPosition++);
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return equalSoFar;
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the byte at the current position and increases the position by 1.
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the byte at the current position.
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is equal or greater than limit.
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte get();
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Reads bytes from the current position into the specified byte array and
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * increases the position by the number of bytes read.
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Calling this method has the same effect as
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code get(dest, 0, dest.length)}.
408d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dest
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the destination byte array.
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code dest.length} is greater than {@code remaining()}.
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public ByteBuffer get(byte[] dest) {
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return get(dest, 0, dest.length);
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Reads bytes from the current position into the specified byte array,
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * starting at the specified offset, and increases the position by the
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * number of bytes read.
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dest
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the target byte array.
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param off
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the offset of the byte array, must not be negative and
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            not greater than {@code dest.length}.
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param len
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of bytes to read, must not be negative and not
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            greater than {@code dest.length - off}
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code len} is greater than {@code remaining()}.
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public ByteBuffer get(byte[] dest, int off, int len) {
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int length = dest.length;
440d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson        if ((off < 0) || (len < 0) || ((long) off + (long) len > length)) {
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IndexOutOfBoundsException();
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (len > remaining()) {
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new BufferUnderflowException();
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = off; i < off + len; i++) {
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            dest[i] = get();
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the byte at the specified index and does not change the position.
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and less than limit.
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the byte at the specified index.
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if index is invalid.
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract byte get(int index);
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the char at the current position and increases the position by 2.
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 2 bytes starting at the current position are composed into a char
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned.
469d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the char at the current position.
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 2}.
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract char getChar();
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the char at the specified index.
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 2 bytes starting from the specified index are composed into a char
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 2}.
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the char at the specified index.
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract char getChar(int index);
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the double at the current position and increases the position by
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 8.
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 8 bytes starting from the current position are composed into a double
497d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     * according to the current byte order and returned.
498d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the double at the current position.
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 8}.
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract double getDouble();
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the double at the specified index.
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 8 bytes starting at the specified index are composed into a double
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
511d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 8}.
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the double at the specified index.
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract double getDouble(int index);
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the float at the current position and increases the position by
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 4.
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 4 bytes starting at the current position are composed into a float
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned.
527d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the float at the current position.
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 4}.
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract float getFloat();
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the float at the specified index.
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 4 bytes starting at the specified index are composed into a float
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
540d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 4}.
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the float at the specified index.
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract float getFloat(int index);
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the int at the current position and increases the position by 4.
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 4 bytes starting at the current position are composed into a int
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned.
555d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the int at the current position.
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 4}.
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract int getInt();
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the int at the specified index.
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 4 bytes starting at the specified index are composed into a int
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
568d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 4}.
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the int at the specified index.
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract int getInt(int index);
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the long at the current position and increases the position by 8.
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 8 bytes starting at the current position are composed into a long
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned.
583d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the long at the current position.
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 8}.
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract long getLong();
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the long at the specified index.
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 8 bytes starting at the specified index are composed into a long
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 8}.
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the long at the specified index.
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract long getLong(int index);
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the short at the current position and increases the position by 2.
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 2 bytes starting at the current position are composed into a short
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned.
611d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the short at the current position.
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferUnderflowException
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if the position is greater than {@code limit - 2}.
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract short getShort();
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the short at the specified index.
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The 2 bytes starting at the specified index are composed into a short
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * according to the current byte order and returned. The position is not
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * changed.
624d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 2}.
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the short at the specified index.
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract short getShort(int index);
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates whether this buffer is based on a byte array and provides
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * read/write access.
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if this buffer is based on a byte array and provides
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         read/write access, {@code false} otherwise.
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final boolean hasArray() {
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return protectedHasArray();
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
648d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the hash code calculated from the remaining bytes.
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
651d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson    @Override
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int hashCode() {
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int myPosition = position;
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int hash = 0;
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        while (myPosition < limit) {
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            hash = hash + get(myPosition++);
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return hash;
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Indicates whether this buffer is direct.
663d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract boolean isDirect();
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the byte order used by this buffer when converting bytes from/to
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * other primitive types.
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The default byte order of byte buffer is always
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@link ByteOrder#BIG_ENDIAN BIG_ENDIAN}
674d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the byte order used by this buffer when converting bytes from/to
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *         other primitive types.
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final ByteOrder order() {
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return order == Endianness.BIG_ENDIAN ? ByteOrder.BIG_ENDIAN
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                : ByteOrder.LITTLE_ENDIAN;
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the byte order of this buffer.
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param byteOrder
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte order to set. If {@code null} then the order
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            will be {@link ByteOrder#LITTLE_ENDIAN LITTLE_ENDIAN}.
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see ByteOrder
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final ByteBuffer order(ByteOrder byteOrder) {
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return orderImpl(byteOrder);
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ByteBuffer orderImpl(ByteOrder byteOrder) {
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        order = byteOrder == ByteOrder.BIG_ENDIAN ? Endianness.BIG_ENDIAN
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                : Endianness.LITTLE_ENDIAN;
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Child class implements this method to realize {@code array()}.
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #array()
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    abstract byte[] protectedArray();
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #arrayOffset()
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    abstract int protectedArrayOffset();
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @see #hasArray()
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    abstract boolean protectedHasArray();
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given byte to the current position and increases the position
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 1.
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param b
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte to write.
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is equal or greater than limit.
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer put(byte b);
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes bytes in the given byte array to the current position and
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * increases the position by the number of bytes written.
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Calling this method has the same effect as
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code put(src, 0, src.length)}.
743d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param src
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the source byte array.
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public final ByteBuffer put(byte[] src) {
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return put(src, 0, src.length);
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes bytes in the given byte array, starting from the specified offset,
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * to the current position and increases the position by the number of bytes
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * written.
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param src
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the source byte array.
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param off
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the offset of byte array, must not be negative and not greater
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            than {@code src.length}.
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param len
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the number of bytes to write, must not be negative and not
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            greater than {@code src.length - off}.
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code remaining()} is less than {@code len}.
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if either {@code off} or {@code len} is invalid.
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public ByteBuffer put(byte[] src, int off, int len) {
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int length = src.length;
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if ((off < 0 ) || (len < 0) || ((long)off + (long)len > length)) {
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IndexOutOfBoundsException();
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (len > remaining()) {
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new BufferOverflowException();
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = off; i < off + len; i++) {
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            put(src[i]);
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes all the remaining bytes of the {@code src} byte buffer to this
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's current position, and increases both buffers' position by the
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * number of bytes copied.
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param src
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the source byte buffer.
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                {@code remaining()}.
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IllegalArgumentException
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code src} is this buffer.
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public ByteBuffer put(ByteBuffer src) {
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (src == this) {
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException();
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (src.remaining() > remaining()) {
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new BufferOverflowException();
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] contents = new byte[src.remaining()];
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        src.get(contents);
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        put(contents);
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this;
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Write a byte to the specified index of this buffer without changing the
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position.
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and less than the limit.
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param b
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the byte to write.
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer put(int index, byte b);
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given char to the current position and increases the position
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 2.
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The char is converted to bytes using the current byte order.
842d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the char to write.
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 2}.
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putChar(char value);
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given char to the specified index of this buffer.
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The char is converted to bytes using the current byte order. The position
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is not changed.
858d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 2}.
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the char to write.
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putChar(int index, char value);
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given double to the current position and increases the position
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 8.
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The double is converted to bytes using the current byte order.
877d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double to write.
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 8}.
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putDouble(double value);
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given double to the specified index of this buffer.
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The double is converted to bytes using the current byte order. The
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position is not changed.
893d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 8}.
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the double to write.
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putDouble(int index, double value);
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given float to the current position and increases the position
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 4.
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The float is converted to bytes using the current byte order.
912d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float to write.
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 4}.
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putFloat(float value);
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given float to the specified index of this buffer.
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The float is converted to bytes using the current byte order. The
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position is not changed.
928d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 4}.
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the float to write.
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putFloat(int index, float value);
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given int to the current position and increases the position by
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 4.
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The int is converted to bytes using the current byte order.
947d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the int to write.
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 4}.
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putInt(int value);
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given int to the specified index of this buffer.
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The int is converted to bytes using the current byte order. The position
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is not changed.
963d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 4}.
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the int to write.
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putInt(int index, int value);
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given long to the current position and increases the position
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 8.
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The long is converted to bytes using the current byte order.
982d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long to write.
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 8}.
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putLong(long value);
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given long to the specified index of this buffer.
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The long is converted to bytes using the current byte order. The position
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * is not changed.
998d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 8}.
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the long to write.
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putLong(int index, long value);
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given short to the current position and increases the position
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * by 2.
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The short is converted to bytes using the current byte order.
1017d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the short to write.
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception BufferOverflowException
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if position is greater than {@code limit - 2}.
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putShort(short value);
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Writes the given short to the specified index of this buffer.
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The short is converted to bytes using the current byte order. The
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position is not changed.
1033d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index, must not be negative and equal or less than
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            {@code limit - 2}.
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the short to write.
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return this buffer.
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception IndexOutOfBoundsException
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if {@code index} is invalid.
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @exception ReadOnlyBufferException
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *                if no changes may be made to the contents of this buffer.
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer putShort(int index, short value);
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The sliced buffer's capacity will be this buffer's
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code remaining()}, and it's zero position will correspond to
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * this buffer's current position. The new buffer's position will be 0,
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * limit will be its capacity, and its mark is cleared. The new buffer's
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * read-only property and byte order are the same as this buffer's.
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p>
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The new buffer shares its content with this buffer, which means either
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * buffer's change of content will be visible to the other. The two buffer's
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * position, limit and mark are independent.
1059d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson     *
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a sliced buffer that shares its content with this buffer.
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public abstract ByteBuffer slice();
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a string representing the state of this byte buffer.
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return a string representing the state of this byte buffer.
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1069d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson    @Override
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String toString() {
1071d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson        StringBuilder buf = new StringBuilder();
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(getClass().getName());
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(", status: capacity="); //$NON-NLS-1$
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(capacity());
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(" position="); //$NON-NLS-1$
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(position());
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(" limit="); //$NON-NLS-1$
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buf.append(limit());
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return buf.toString();
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1082