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 java.io.IOException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A buffer of chars. 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A char 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 char array and create a buffer 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * based on it;</li> 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>{@link #wrap(char[]) Wrap} an existing char array to create a new 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer;</li> 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>{@link #wrap(CharSequence) Wrap} an existing char sequence to create a 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * new buffer;</li> 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>Use {@link java.nio.ByteBuffer#asCharBuffer() ByteBuffer.asCharBuffer} 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to create a char buffer based on a byte buffer.</li> 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </ul> 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilsonpublic abstract class CharBuffer extends Buffer implements 38d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson Comparable<CharBuffer>, CharSequence, Appendable, Readable { 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a char buffer based on a newly allocated char array. 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param capacity 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the capacity of the new buffer. 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the created char buffer. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code capacity} is less than zero. 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CharBuffer allocate(int capacity) { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (capacity < 0) { 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return BufferFactory.newCharBuffer(capacity); 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a new char buffer by wrapping the given char array. 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code wrap(array, 0, array.length)}. 61d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param array 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char array which the new buffer will be based on. 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the created char buffer. 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CharBuffer wrap(char[] array) { 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return wrap(array, 0, array.length); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a new char buffer by wrapping the given char array. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer's position will be {@code start}, limit will be 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code start + len}, capacity will be the length of the array. 75d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param array 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char array which the new buffer will be based on. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the start index, must not be negative and not greater than 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code array.length}. 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param len 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the length, must not be negative and not greater than 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code array.length - start}. 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the created char buffer. 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code start} or {@code len} is invalid. 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CharBuffer wrap(char[] array, int start, int len) { 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length = array.length; 90d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if ((start < 0) || (len < 0) || (long) start + (long) len > length) { 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CharBuffer buf = BufferFactory.newCharBuffer(array); 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.position = start; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.limit = start + len; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a new char buffer by wrapping the given char sequence. 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code wrap(chseq, 0, chseq.length())}. 106d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param chseq 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char sequence which the new buffer will be based on. 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the created char buffer. 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CharBuffer wrap(CharSequence chseq) { 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return BufferFactory.newCharBuffer(chseq); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates a new char buffer by wrapping the given char sequence. 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer's position will be {@code start}, limit will be 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code end}, capacity will be the length of the char sequence. The new 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer is read-only. 121d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param chseq 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char sequence which the new buffer will be based on. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the start index, must not be negative and not greater than 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code chseq.length()}. 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param end 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the end index, must be no less than {@code start} and no 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than {@code chseq.length()}. 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the created char buffer. 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code start} or {@code end} is invalid. 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CharBuffer wrap(CharSequence chseq, int start, int end) { 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (chseq == null) { 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (start < 0 || end < start || end > chseq.length()) { 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 141d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CharBuffer result = BufferFactory.newCharBuffer(chseq); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.position = start; 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.limit = end; 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a {@code CharBuffer} with given capacity. 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param capacity 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the capacity of the buffer. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CharBuffer(int capacity) { 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(capacity); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project _elementSizeShift = 1; 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the char array which this buffer is based on, if there is one. 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the char array which this buffer is based on. 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if this buffer is based on an array, but it is read-only. 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if this buffer is not based on an array. 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final char[] array() { 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return protectedArray(); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the offset of the char array which this buffer is based on, if 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * there is one. 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The offset is the index of the array corresponds to the zero position of 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the buffer. 180d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the offset of the char array which this buffer is based on. 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if this buffer is based on an array but it is read-only. 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception UnsupportedOperationException 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if this buffer is not based on an array. 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int arrayOffset() { 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return protectedArrayOffset(); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-added 192d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson @Override 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object _array() { 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hasArray()) { 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return array(); 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 200d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson @Override 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int _arrayOffset() { 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hasArray()) { 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return arrayOffset(); 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-added 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a read-only buffer that shares its content with this buffer. 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The returned buffer is guaranteed to be a new instance, even if this 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer is read-only itself. The new buffer's position, limit, capacity 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and mark are the same as this buffer's. 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer shares its content with this buffer, which means this 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's change of content will be visible to the new buffer. The two 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's position, limit and mark are independent. 219d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a read-only version of this buffer. 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer asReadOnlyBuffer(); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the character located at the specified index in the buffer. The 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * index value is referenced from the current buffer position. 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index referenced from the current buffer position. It must 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not be less than zero but less than the value obtained from a 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * call to {@code remaining()}. 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the character located at the specified index (referenced from the 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * current position) in the buffer. 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the index is invalid. 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final char charAt(int index) { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index < 0 || index >= remaining()) { 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return get(position + index); 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compacts this char buffer. 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The remaining chars will be moved to the head of the buffer, 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * starting from position zero. Then the position is set to 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code remaining()}; the limit is set to capacity; the mark is cleared. 250d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer compact(); 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compare the remaining chars of this buffer to another char 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's remaining chars. 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param otherBuffer 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * another char buffer. 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a negative value if this is less than {@code otherBuffer}; 0 if 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this equals to {@code otherBuffer}; a positive value if this is 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than {@code otherBuffer}. 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ClassCastException 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code otherBuffer} is not a char buffer. 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int compareTo(CharBuffer otherBuffer) { 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining() 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : otherBuffer.remaining(); 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int thisPos = position; 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int otherPos = otherBuffer.position; 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char thisByte, otherByte; 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (compareRemaining > 0) { 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thisByte = get(thisPos); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project otherByte = otherBuffer.get(otherPos); 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thisByte != otherByte) { 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return thisByte < otherByte ? -1 : 1; 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thisPos++; 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project otherPos++; 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project compareRemaining--; 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return remaining() - otherBuffer.remaining(); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a duplicated buffer that shares its content with this buffer. 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The duplicated buffer's initial position, limit, capacity and mark are 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the same as this buffer's. The duplicated buffer's read-only property and 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * byte order are the same as this buffer's, too. 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer shares its content with this buffer, which means either 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's change of content will be visible to the other. The two buffer's 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position, limit and mark are independent. 298d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a duplicated buffer that shares its content with this buffer. 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer duplicate(); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Checks whether this char buffer is equal to another object. 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If {@code other} is not a char buffer then {@code false} is returned. Two 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * char buffers are equal if and only if their remaining chars are exactly 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the same. Position, limit, capacity and mark are not considered. 309d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param other 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to compare with this char buffer. 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this char buffer is equal to {@code other}, 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 315d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson @Override 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object other) { 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(other instanceof CharBuffer)) { 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CharBuffer otherBuffer = (CharBuffer) other; 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (remaining() != otherBuffer.remaining()) { 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int myPosition = position; 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int otherPosition = otherBuffer.position; 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean equalSoFar = true; 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (equalSoFar && (myPosition < limit)) { 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equalSoFar = get(myPosition++) == otherBuffer.get(otherPosition++); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return equalSoFar; 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the char at the current position and increases the position by 1. 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the char at the current position. 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferUnderflowException 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the position is equal or greater than limit. 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract char get(); 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads chars from the current position into the specified char array and 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * increases the position by the number of chars read. 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code get(dest, 0, dest.length)}. 351d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param dest 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the destination char array. 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferUnderflowException 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code dest.length} is greater than {@code remaining()}. 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CharBuffer get(char[] dest) { 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return get(dest, 0, dest.length); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads chars from the current position into the specified char array, 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * starting from the specified offset, and increases the position by the 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of chars read. 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param dest 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the target char array. 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param off 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the offset of the char array, must not be negative and not 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than {@code dest.length}. 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param len 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The number of chars to read, must be no less than zero and no 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than {@code dest.length - off}. 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code off} or {@code len} is invalid. 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferUnderflowException 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code len} is greater than {@code remaining()}. 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CharBuffer get(char[] dest, int off, int len) { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length = dest.length; 383d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if ((off < 0) || (len < 0) || (long) off + (long) len > length) { 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 386d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (len > remaining()) { 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new BufferUnderflowException(); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = off; i < off + len; i++) { 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dest[i] = get(); 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a char at the specified index; the position is not changed. 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index, must not be negative and less than limit. 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a char at the specified index. 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if index is invalid. 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract char get(int index); 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates whether this buffer is based on a char array and is read/write. 409d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this buffer is based on a byte array and provides 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read/write access, {@code false} otherwise. 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final boolean hasArray() { 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return protectedHasArray(); 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calculates this buffer's hash code from the remaining chars. The 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position, limit, capacity and mark don't affect the hash code. 420d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the hash code calculated from the remaining chars. 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 423d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson @Override 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int myPosition = position; 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int hash = 0; 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (myPosition < limit) { 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hash = hash + get(myPosition++); 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hash; 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates whether this buffer is direct. A direct buffer will try its 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * best to take advantage of native memory APIs and it may not stay in the 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Java heap, so it is not affected by garbage collection. 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A char buffer is direct if it is based on a byte buffer and the byte 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer is direct. 440d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this buffer is direct, {@code false} otherwise. 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract boolean isDirect(); 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the number of remaining chars. 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of remaining chars. 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final int length() { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return remaining(); 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the byte order used by this buffer when converting chars from/to 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes. 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If this buffer is not based on a byte buffer, then this always returns 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the platform's native byte order. 460d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the byte order used by this buffer when converting chars from/to 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * bytes. 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract ByteOrder order(); 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Child class implements this method to realize {@code array()}. 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #array() 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project abstract char[] protectedArray(); 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Child class implements this method to realize {@code arrayOffset()}. 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #arrayOffset() 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project abstract int protectedArrayOffset(); 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Child class implements this method to realize {@code hasArray()}. 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #hasArray() 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project abstract boolean protectedHasArray(); 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes the given char to the current position and increases the position 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * by 1. 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char to write. 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if position is equal or greater than limit. 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer put(char c); 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes chars from the given char array to the current position and 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * increases the position by the number of chars written. 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code put(src, 0, src.length)}. 507d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param src 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the source char array. 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code remaining()} is less than {@code src.length}. 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final CharBuffer put(char[] src) { 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put(src, 0, src.length); 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes chars from the given char array, starting from the specified offset, 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to the current position and increases the position by the number of chars 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * written. 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param src 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the source char array. 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param off 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the offset of char array, must not be negative and not greater 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than {@code src.length}. 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param len 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the number of chars to write, must be no less than zero and no 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than {@code src.length - off}. 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code remaining()} is less than {@code len}. 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code off} or {@code len} is invalid. 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CharBuffer put(char[] src, int off, int len) { 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length = src.length; 543d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if ((off < 0) || (len < 0) || (long) off + (long) len > length) { 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 546d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (len > remaining()) { 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new BufferOverflowException(); 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = off; i < off + len; i++) { 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project put(src[i]); 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes all the remaining chars of the {@code src} char buffer to this 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's current position, and increases both buffers' position by the 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of chars copied. 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param src 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the source char buffer. 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code src.remaining()} is greater than this buffer's 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code remaining()}. 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IllegalArgumentException 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code src} is this buffer. 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CharBuffer put(CharBuffer src) { 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (src == this) { 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (src.remaining() > remaining()) { 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new BufferOverflowException(); 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 579d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project char[] contents = new char[src.remaining()]; 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project src.get(contents); 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project put(contents); 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes a char to the specified index of this buffer; the position is not 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * changed. 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the index, must be no less than zero and less than the limit. 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char to write. 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if index is invalid. 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer put(int index, char c); 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes all chars of the given string to the current position of this 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer, and increases the position by the length of string. 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code put(str, 0, str.length())}. 608d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param str 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the string to write. 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code remaining()} is less than the length of string. 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public final CharBuffer put(String str) { 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put(str, 0, str.length()); 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes chars of the given string to the current position of this buffer, 623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and increases the position by the number of chars written. 624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param str 626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the string to write. 627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the first char to write, must not be negative and not greater 629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than {@code str.length()}. 630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param end 631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the last char to write (excluding), must be less than 632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code start} and not greater than {@code str.length()}. 633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code remaining()} is less than {@code end - start}. 636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code start} or {@code end} is invalid. 638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CharBuffer put(String str, int start, int end) { 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length = str.length(); 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (start < 0 || end < start || end > length) { 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 646d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (end - start > remaining()) { 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new BufferOverflowException(); 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = start; i < end; i++) { 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project put(str.charAt(i)); 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a sliced buffer that shares its content with this buffer. 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The sliced buffer's capacity will be this buffer's {@code remaining()}, 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and its zero position will correspond to this buffer's current position. 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer's position will be 0, limit will be its capacity, and its 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * mark is cleared. The new buffer's read-only property and byte order are 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * same as this buffer. 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer shares its content with this buffer, which means either 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's change of content will be visible to the other. The two buffer's 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position, limit and mark are independent. 668d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a sliced buffer that shares its content with this buffer. 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharBuffer slice(); 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a new char buffer representing a sub-sequence of this buffer's 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * current remaining content. 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer's position will be {@code position() + start}, limit will 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be {@code position() + end}, capacity will be the same as this buffer. 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer's read-only property and byte order are the same as this 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer. 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The new buffer shares its content with this buffer, which means either 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer's change of content will be visible to the other. The two buffer's 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position, limit and mark are independent. 685d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the start index of the sub-sequence, referenced from the 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * current buffer position. Must not be less than zero and not 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * greater than the value obtained from a call to 690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code remaining()}. 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param end 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the end index of the sub-sequence, referenced from the current 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * buffer position. Must not be less than {@code start} and not 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be greater than the value obtained from a call to 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code remaining()}. 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a new char buffer represents a sub-sequence of this buffer's 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * current remaining content. 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code start} or {@code end} is invalid. 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract CharSequence subSequence(int start, int end); 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a string representing the current remaining chars of this buffer. 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a string representing the current remaining chars of this buffer. 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 708d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson @Override 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 7102c5e73632c4bb75004fd3858b2bba30857e82598Elliott Hughes StringBuilder result = new StringBuilder(limit - position); 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = position; i < limit; i++) { 7122c5e73632c4bb75004fd3858b2bba30857e82598Elliott Hughes result.append(get(i)); 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 7142c5e73632c4bb75004fd3858b2bba30857e82598Elliott Hughes return result.toString(); 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes the given char to the current position and increases the position 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * by 1. 720d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the char to write. 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if position is equal or greater than limit. 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 729d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson public CharBuffer append(char c) { 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put(c); 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes all chars of the given character sequence {@code csq} to the 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * current position of this buffer, and increases the position by the length 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of the csq. 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Calling this method has the same effect as {@code append(csq.toString())}. 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * If the {@code CharSequence} is {@code null} the string "null" will be 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * written to the buffer. 741d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param csq 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the {@code CharSequence} to write. 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return this buffer. 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception BufferOverflowException 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code remaining()} is less than the length of csq. 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception ReadOnlyBufferException 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of this buffer. 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 750d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson public CharBuffer append(CharSequence csq) { 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (csq != null) { 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put(csq.toString()); 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put("null"); //$NON-NLS-1$ 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes chars of the given {@code CharSequence} to the current position of 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this buffer, and increases the position by the number of chars written. 760d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param csq 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the {@code CharSequence} to write. 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param start 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the first char to write, must not be negative and not greater 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * than {@code csq.length()}. 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param end 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the last char to write (excluding), must be less than 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code start} and not greater than {@code csq.length()}. 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 end - start}. 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception IndexOutOfBoundsException 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if either {@code start} or {@code end} 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 */ 777d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson public CharBuffer append(CharSequence csq, int start, int end) { 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (csq == null) { 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project csq = "null"; //$NON-NLS-1$ 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CharSequence cs = csq.subSequence(start, end); 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cs.length() > 0) { 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return put(cs.toString()); 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Reads characters from this buffer and puts them into {@code target}. The 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of chars that are copied is either the number of remaining chars 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in this buffer or the number of remaining chars in {@code target}, 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * whichever is smaller. 793d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson * 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param target 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the target char buffer. 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if {@code target} is this buffer. 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IOException 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if an I/O error occurs. 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ReadOnlyBufferException 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no changes may be made to the contents of {@code target}. 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of chars copied or -1 if there are no chars left to be 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * read from this buffer. 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int read(CharBuffer target) throws IOException { 806d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson int remaining = remaining(); 807d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if (target == this) { 808d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if (remaining == 0) { 809d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson return -1; 810d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson } 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 813d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if (remaining == 0) { 814d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson return limit > 0 && target.remaining() == 0 ? 0 : -1; 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 816d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson remaining = Math.min(target.remaining(), remaining); 817d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson if (remaining > 0) { 818d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson char[] chars = new char[remaining]; 819d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson get(chars); 820d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson target.put(chars); 821d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson } 822d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson return remaining; 823d2510429e70ab91a04c67d5ca39b30f354eba221Jesse Wilson } 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 825