1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The wrapper for the primitive type {@code byte}.
22f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson *
23f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.1
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
250d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes@FindBugsSuppressWarnings("DM_NUMBER_CTOR")
26f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilsonpublic final class Byte extends Number implements Comparable<Byte> {
27f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = -7183698231559129828L;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The value which the receiver represents.
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final byte value;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The maximum {@code Byte} value, 2<sup>7</sup>-1.
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final byte MAX_VALUE = (byte) 0x7F;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The minimum {@code Byte} value, -2<sup>7</sup>.
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final byte MIN_VALUE = (byte) 0x80;
44f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The number of bits needed to represent a {@code Byte} value in two's
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * complement form.
48f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
49f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.5
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int SIZE = 8;
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The {@link Class} object that represents the primitive type {@code byte}.
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @SuppressWarnings("unchecked")
57726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    public static final Class<Byte> TYPE
58726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch            = (Class<Byte>) byte[].class.getComponentType();
59e26ba79900d471d02d656f686926918ef7dc751fElliott Hughes    // Note: Byte.TYPE can't be set to "byte.class", since *that* is
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    // defined to be "java.lang.Byte.TYPE";
61f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code Byte} with the specified primitive byte value.
64f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the primitive byte value to store in the new instance.
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Byte(byte value) {
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.value = value;
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code Byte} from the specified string.
74f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a single byte value.
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
788890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a byte value.
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseByte(String)
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Byte(String string) throws NumberFormatException {
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this(parseByte(string));
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the primitive value of this byte.
87f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this object's primitive value.
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public byte byteValue() {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this object to the specified byte object to determine their
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * relative order.
98f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the byte object to compare this object to.
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if the value of this byte is less than the value
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         of {@code object}; 0 if the value of this byte and the value of
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code object} are equal; a positive value if the value of this
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         byte is greater than the value of {@code object}.
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see java.lang.Comparable
106f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.2
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int compareTo(Byte object) {
109c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes        return compare(value, object.value);
110c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes    }
111c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes
112c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes    /**
113c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * Compares two {@code byte} values.
114c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * @return 0 if lhs = rhs, less than 0 if lhs &lt; rhs, and greater than 0 if lhs &gt; rhs.
115c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     * @since 1.7
116c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes     */
117c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes    public static int compare(byte lhs, byte rhs) {
118c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes        return lhs > rhs ? 1 : (lhs < rhs ? -1 : 0);
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string and returns a {@code Byte} instance if the
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * string can be decoded into a single byte value. The string may be an
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * optional minus sign "-" followed by a hexadecimal ("0x..." or "#..."),
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * octal ("0..."), or decimal ("...") representation of a byte.
126f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            a string representation of a single byte value.
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Byte} containing the value represented by {@code string}.
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
1318890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} cannot be parsed as a byte value.
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Byte decode(String string) throws NumberFormatException {
1342fc5dcd5614f910f25d794d272834752a72e63b1Elliott Hughes        int intValue = Integer.decode(string);
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte result = (byte) intValue;
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (result == intValue) {
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return valueOf(result);
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
1391f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes        throw new NumberFormatException("Value out of range for byte: \"" + string + "\"");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public double doubleValue() {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compares this object with the specified object and indicates if they are
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * equal. In order to be equal, {@code object} must be an instance of
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code Byte} and have the same byte value as this object.
151f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param object
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare this byte with.
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if the specified object is equal to this
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code Byte}; {@code false} otherwise.
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
1580d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes    @FindBugsSuppressWarnings("RC_REF_COMPARISON")
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object object) {
1600d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes        return (object == this) || ((object instanceof Byte) && (((Byte) object).value == value));
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public float floatValue() {
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int intValue() {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public long longValue() {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed decimal byte value. The ASCII
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * character \u002d ('-') is recognized as the minus sign.
186f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a single byte value.
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the primitive byte value represented by {@code string}.
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
1918890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} can not be parsed as a byte value.
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static byte parseByte(String string) throws NumberFormatException {
1941f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes        return parseByte(string, 10);
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed byte value using the specified
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * radix. The ASCII character \u002d ('-') is recognized as the minus sign.
200f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a single byte value.
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param radix
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the radix to use when parsing.
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the primitive byte value represented by {@code string} using
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code radix}.
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2088890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} can not be parsed as a byte value, or
2098890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             {@code radix < Character.MIN_RADIX ||
2108890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             radix > Character.MAX_RADIX}.
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2121f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes    public static byte parseByte(String string, int radix) throws NumberFormatException {
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int intValue = Integer.parseInt(string, radix);
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        byte result = (byte) intValue;
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (result == intValue) {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return result;
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2181f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes        throw new NumberFormatException("Value out of range for byte: \"" + string + "\"");
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public short shortValue() {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return value;
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String toString() {
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return Integer.toString(value);
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
2324b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes     * Returns a two-digit hex string. That is, -1 becomes "ff" or "FF" and 2 becomes "02".
2334b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes     * @hide internal use only
2344b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes     */
2354b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes    public static String toHexString(byte b, boolean upperCase) {
2364b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes        return IntegralToString.byteToHexString(b, upperCase);
2374b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes    }
2384b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes
2394b25199bc0b7a64a6feaa60e7d5d6b0474341234Elliott Hughes    /**
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a string containing a concise, human-readable description of the
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * specified byte value.
242f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param value
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the byte to convert to a string.
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a printable representation of {@code value}.
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String toString(byte value) {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return Integer.toString(value);
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed decimal byte value.
253f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a single byte value.
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Byte} instance containing the byte value represented by
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code string}.
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2598890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} can not be parsed as a byte value.
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseByte(String)
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Byte valueOf(String string) throws NumberFormatException {
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return valueOf(parseByte(string));
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Parses the specified string as a signed byte value using the specified
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * radix.
269f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param string
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the string representation of a single byte value.
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param radix
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the radix to use when parsing.
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Byte} instance containing the byte value represented by
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code string} using {@code radix}.
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws NumberFormatException
2778890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             if {@code string} can not be parsed as a byte value, or
2788890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             {@code radix < Character.MIN_RADIX ||
2798890504f824eca28560987cc23d0b18e8a62bbaaElliott Hughes     *             radix > Character.MAX_RADIX}.
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see #parseByte(String, int)
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2821f07ea29bc2d334c55c16227582a7795b8c117c1Elliott Hughes    public static Byte valueOf(String string, int radix) throws NumberFormatException {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return valueOf(parseByte(string, radix));
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
285f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a {@code Byte} instance for the specified byte value.
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If it is not necessary to get a new {@code Byte} instance, it is
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * recommended to use this method instead of the constructor, since it
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * maintains a cache of instances which may result in better performance.
292f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param b
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the byte value to store in the instance.
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a {@code Byte} instance containing {@code b}.
296f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     * @since 1.5
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Byte valueOf(byte b) {
299726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch        return VALUES[b + 128];
300726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    }
301726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch
302726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    /**
303726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     * A cache of instances used by {@link Byte#valueOf(byte)} and auto-boxing
304726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch     */
305726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    private static final Byte[] VALUES = new Byte[256];
306726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch
307726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch    static {
308726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch        for (int i = -128; i < 128; i++) {
309726ac583d69b37db03c6279af5b36df7b837ede1Joshua Bloch            VALUES[i + 128] = new Byte((byte) i);
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
313