| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import java.nio.BufferOverflowException; |
| import java.nio.ByteBuffer; |
| import java.nio.ByteOrder; |
| import java.nio.FloatBuffer; |
| import java.nio.IntBuffer; |
| import java.nio.ShortBuffer; |
| |
| public class Main { |
| public static void main(String[] args) { |
| intFloatTest(); |
| basicShortTest(); |
| } |
| |
| /* |
| * Create a buffer and fiddle with it. |
| */ |
| public static void basicShortTest() { |
| ByteBuffer directBuf = ByteBuffer.allocateDirect(64); |
| //ByteBuffer directBuf = ByteBuffer.allocateDirect(65); |
| |
| ShortBuffer shortBuf = directBuf.asShortBuffer(); |
| |
| short[] myShorts = { |
| 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, |
| 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, |
| 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, |
| 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031 |
| }; |
| |
| shortBuf.position(0); |
| shortBuf.put(myShorts, 0, 32); // should work |
| shortBuf.position(0); |
| shortBuf.put(myShorts, 16, 16); // should work |
| shortBuf.put(myShorts, 16, 16); // advance to end |
| |
| try { |
| shortBuf.put(myShorts, 0, 1); // should fail |
| System.err.println("ERROR: out-of-bounds put succeeded\n"); |
| } catch (BufferOverflowException boe) { |
| System.out.println("Got expected buffer overflow exception"); |
| } |
| |
| try { |
| shortBuf.position(0); |
| shortBuf.put(myShorts, 0, 33); // should fail |
| System.err.println("ERROR: out-of-bounds put succeeded\n"); |
| } catch (IndexOutOfBoundsException ioobe) { |
| System.out.println("Got expected out-of-bounds exception"); |
| } |
| |
| try { |
| shortBuf.position(16); |
| shortBuf.put(myShorts, 0, 17); // should fail |
| System.err.println("ERROR: out-of-bounds put succeeded\n"); |
| } catch (BufferOverflowException boe) { |
| System.out.println("Got expected buffer overflow exception"); |
| } |
| } |
| |
| /* |
| * Try this with either floats or ints; ints fail with |
| * BufferOverflowException, floats work. |
| * |
| * From http://code.google.com/p/android/issues/detail?id=1585 . |
| */ |
| public static void intFloatTest() { |
| ByteBuffer direct = ByteBuffer.allocateDirect(100); |
| direct.order(ByteOrder.nativeOrder()); |
| IntBuffer int1 = direct.asIntBuffer(); |
| int data[] = new int[25]; |
| //FloatBuffer int1 = direct.asFloatBuffer(); |
| //float data[] = new float[25]; |
| int1.clear (); |
| int1.put (data); |
| int1.position (0); |
| |
| int1.clear (); |
| int1.put (data); |
| int1.position (0); |
| } |
| } |