1dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* 2dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * this work for additional information regarding copyright ownership. 5dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * (the "License"); you may not use this file except in compliance with 7dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the License. You may obtain a copy of the License at 8dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 9dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 11dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Unless required by applicable law or agreed to in writing, software 12dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * See the License for the specific language governing permissions and 15dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * limitations under the License. 16dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 17dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 18e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.tests.java.nio; 19dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 20dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.File; 21dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileInputStream; 22dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileOutputStream; 23dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.IOException; 24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.RandomAccessFile; 25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.BufferUnderflowException; 26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer; 27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.IntBuffer; 28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.MappedByteBuffer; 29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel; 30dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NonWritableChannelException; 31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel.MapMode; 32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase; 34dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class MappedByteBufferTest extends TestCase { 36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes File tmpFile, emptyFile; 38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * A regression test for failing to correctly set capacity of underlying 41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * wrapped buffer from a mapped byte buffer. 42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testasIntBuffer() throws IOException { 44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Map file 45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileInputStream fis = new FileInputStream(tmpFile); 46dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fc = fis.getChannel(); 47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc 48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes .size()); 49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int len = mmb.capacity(); 50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Got wrong number of bytes", 46, len); //$NON-NLS-1$ 51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Read in our 26 bytes 53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 26; i++) { 54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte b = mmb.get(); 55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Got wrong byte value", (byte) 'A' + i, b); //$NON-NLS-1$ 56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Now convert to an IntBuffer to read our ints 59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes IntBuffer ibuffer = mmb.asIntBuffer(); 60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 5; i++) { 61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int val = ibuffer.get(); 62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("Got wrong int value", i + 1, val); //$NON-NLS-1$ 63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fc.close(); 65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Regression for HARMONY-6315 - FileChannel.map throws IOException 69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * when called with size 0 70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * 71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @throws IOException 72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void testEmptyBuffer() throws IOException { 74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Map empty file 75dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileInputStream fis = new FileInputStream(emptyFile); 76dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fc = fis.getChannel(); 77dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); 78dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 79dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check non-null 80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertNotNull("MappedByteBuffer created from empty file should not be null", 81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmb); 82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // check capacity is 0 84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes int len = mmb.capacity(); 85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals("MappedByteBuffer created from empty file should have 0 capacity", 86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 0, len); 87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse("MappedByteBuffer from empty file shouldn't be backed by an array ", 89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmb.hasArray()); 90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try 92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byte b = mmb.get(); 94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Calling MappedByteBuffer.get() on empty buffer should throw a BufferUnderflowException"); 95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes catch (BufferUnderflowException e) 97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected behaviour 99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // test expected exceptions thrown 102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try 103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmb = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()); 105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Expected NonWritableChannelException to be thrown"); 106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes catch (NonWritableChannelException e) 108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected behaviour 110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes try 112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmb = fc.map(FileChannel.MapMode.PRIVATE, 0, fc.size()); 114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fail("Expected NonWritableChannelException to be thrown"); 115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes catch (NonWritableChannelException e) 117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes { 118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // expected behaviour 119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fc.close(); 121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests {@link java.nio.MappedByteBuffer#force()} 125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_force() throws IOException { 127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // buffer was not mapped in read/write mode 128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileInputStream fileInputStream = new FileInputStream(tmpFile); 129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelRead = fileInputStream.getChannel(); 130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmbRead = fileChannelRead.map(MapMode.READ_ONLY, 0, 131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelRead.size()); 132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmbRead.force(); 134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileInputStream inputStream = new FileInputStream(tmpFile); 136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelR = inputStream.getChannel(); 137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer resultRead = fileChannelR.map(MapMode.READ_ONLY, 0, 138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelR.size()); 139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes //If this buffer was not mapped in read/write mode, then invoking this method has no effect. 141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals( 142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes "Invoking force() should have no effect when this buffer was not mapped in read/write mode", 143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmbRead, resultRead); 144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Buffer was mapped in read/write mode 146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes RandomAccessFile randomFile = new RandomAccessFile(tmpFile, "rw"); 147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelReadWrite = randomFile.getChannel(); 148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmbReadWrite = fileChannelReadWrite.map( 149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel.MapMode.READ_WRITE, 0, fileChannelReadWrite.size()); 150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmbReadWrite.put((byte) 'o'); 152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mmbReadWrite.force(); 153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes RandomAccessFile random = new RandomAccessFile(tmpFile, "rw"); 155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelRW = random.getChannel(); 156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer resultReadWrite = fileChannelRW.map( 157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel.MapMode.READ_WRITE, 0, fileChannelRW.size()); 158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Invoking force() will change the buffer 160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertFalse(mmbReadWrite.equals(resultReadWrite)); 161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelRead.close(); 163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelR.close(); 164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelReadWrite.close(); 165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelRW.close(); 166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes /** 169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * @tests {@link java.nio.MappedByteBuffer#load()} 170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */ 171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_load() throws IOException { 172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileInputStream fileInputStream = new FileInputStream(tmpFile); 173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelRead = fileInputStream.getChannel(); 174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmbRead = fileChannelRead.map(MapMode.READ_ONLY, 0, 175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelRead.size()); 176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(mmbRead, mmbRead.load()); 178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes RandomAccessFile randomFile = new RandomAccessFile(tmpFile, "rw"); 180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannelReadWrite = randomFile.getChannel(); 181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mmbReadWrite = fileChannelReadWrite.map( 182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel.MapMode.READ_WRITE, 0, fileChannelReadWrite.size()); 183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(mmbReadWrite, mmbReadWrite.load()); 185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelRead.close(); 187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannelReadWrite.close(); 188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes protected void setUp() throws IOException { 191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes // Create temp file with 26 bytes and 5 ints 192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tmpFile = File.createTempFile("harmony", "test"); //$NON-NLS-1$//$NON-NLS-2$ 193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tmpFile.deleteOnExit(); 194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileOutputStream fileOutputStream = new FileOutputStream(tmpFile); 195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel fileChannel = fileOutputStream.getChannel(); 196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ByteBuffer byteBuffer = ByteBuffer.allocateDirect(26 + 20); 197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 26; i++) { 198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byteBuffer.put((byte) ('A' + i)); 199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes for (int i = 0; i < 5; i++) { 201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byteBuffer.putInt(i + 1); 202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes byteBuffer.rewind(); 204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannel.write(byteBuffer); 205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileChannel.close(); 206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes fileOutputStream.close(); 207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes emptyFile = File.createTempFile("harmony", "test"); //$NON-NLS-1$//$NON-NLS-2$ 209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes emptyFile.deleteOnExit(); 210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes public void test_position() throws IOException { 213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes File tmp = File.createTempFile("hmy", "tmp"); 214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes tmp.deleteOnExit(); 215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes RandomAccessFile f = new RandomAccessFile(tmp, "rw"); 216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes FileChannel ch = f.getChannel(); 217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes MappedByteBuffer mbb = ch.map(MapMode.READ_WRITE, 0L, 100L); 218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes ch.close(); 219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.putInt(1, 1); 221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.position(50); 222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.putInt(50); 223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.flip(); 225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.get(); 226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(1, mbb.getInt()); 227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes 228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes mbb.position(50); 229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes assertEquals(50, mbb.getInt()); 230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes } 231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes} 232