You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gh...@apache.org on 2006/07/10 13:29:16 UTC
svn commit: r420495 - in /incubator/harmony/enhanced/classlib/trunk/modules:
luni/src/main/java/org/apache/harmony/luni/platform/
luni/src/main/native/luni/linux/ luni/src/main/native/luni/windows/
nio/src/main/java/org/apache/harmony/nio/internal/ nio...
Author: gharley
Date: Mon Jul 10 04:29:15 2006
New Revision: 420495
URL: http://svn.apache.org/viewvc?rev=420495&view=rev
Log:
Backing out HARMONY-808 changes pending investigation into NIO test failures on Linux.
Modified:
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSMemory.java
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemory.c
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemoryLinux32.c
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemory.c
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemoryWin32.c
incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/FileChannelImpl.java
incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/common/org/apache/harmony/tests/java/nio/channels/FileChannelTest.java
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSMemory.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSMemory.java?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSMemory.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/platform/OSMemory.java Mon Jul 10 04:29:15 2006
@@ -17,6 +17,8 @@
import java.io.IOException;
+import org.apache.harmony.luni.util.NotYetImplementedException;
+
/**
* This class enables direct access to OS memory.
@@ -537,11 +539,12 @@
public PlatformAddress mmap(long fileDescriptor, long alignment, long size,
int mapMode) throws IOException {
- long address = mmapImpl(fileDescriptor, alignment, size, mapMode);
- if (address == -1) {
- throw new IOException();
- }
- return PlatformAddress.on(address, true);
+ throw new NotYetImplementedException();
+// long address = mmapImpl(fileDescriptor, alignment, size, mapMode);
+// if (address == -1) {
+// throw new IOException();
+// }
+// return PlatformAddress.on(address, true);
}
private native void unmapImpl(long addr);
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemory.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemory.c?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemory.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemory.c Mon Jul 10 04:29:15 2006
@@ -161,3 +161,59 @@
{
*(jdouble *) ((IDATA) address) = value;
}
+
+
+/*
+ * Class: org_apache_harmony_luni_platform_OSMemory
+ * Method: unmapImpl
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSMemory_unmapImpl
+ (JNIEnv * env, jobject thiz, jlong fd)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ hymmap_unmap_file((void *)fd);
+}
+
+/*
+ * Class: org_apache_harmony_luni_platform_OSMemory
+ * Method: mmapImpl
+ * Signature: (JJJI)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_luni_platform_OSMemory_mmapImpl
+ (JNIEnv * env, jobject thiz, jlong fd, jlong alignment, jlong size, jint mmode)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ void *mapAddress = NULL;
+ int prot, flags;
+
+ // Convert from Java mapping mode to port library mapping mode.
+ switch (mmode)
+ {
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_ONLY:
+ prot = PROT_READ;
+ flags = MAP_SHARED;
+ break;
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_WRITE:
+ prot = PROT_READ|PROT_WRITE;
+ flags = MAP_SHARED;
+ break;
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_WRITE_COPY:
+ prot = PROT_READ|PROT_WRITE;
+ flags = MAP_PRIVATE;
+ break;
+ default:
+ return -1;
+ }
+
+//TODO: how to unmap
+ // mapAddress = hymmap_map_filehandler(fd, &mapAddress, mapmode, (IDATA)alignment, (IDATA)size);
+
+ mapAddress = mmap(0,size, prot, flags,fd,alignment);
+ if (mapAddress == NULL)
+ {
+ return -1;
+ }
+ return (jlong) mapAddress;
+}
+
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemoryLinux32.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemoryLinux32.c?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemoryLinux32.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/linux/OSMemoryLinux32.c Mon Jul 10 04:29:15 2006
@@ -23,7 +23,6 @@
#include <unistd.h>
#include "vmi.h"
#include "OSMemory.h"
-#include "IMemorySystem.h"
#define OS_JNI(func) JNICALL Java_org_apache_harmony_luni_platform_OSMemory_##func
@@ -102,54 +101,3 @@
(JNIEnv * env, jobject thiz, jlong addr, jlong size){
return msync((void *)addr, size, MS_SYNC);
};
-
-/*
- * Class: org_apache_harmony_luni_platform_OSMemory
- * Method: unmapImpl
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSMemory_unmapImpl
- (JNIEnv * env, jobject thiz, jlong fd)
-{
- //FIXME: need buffer size to unmap
-}
-
-/*
- * Class: org_apache_harmony_luni_platform_OSMemory
- * Method: mmapImpl
- * Signature: (JJJI)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_harmony_luni_platform_OSMemory_mmapImpl
- (JNIEnv * env, jobject thiz, jlong fd, jlong alignment, jlong size, jint mmode)
-{
- PORT_ACCESS_FROM_ENV (env);
- void *mapAddress = NULL;
- int prot, flags;
-
- // Convert from Java mapping mode to port library mapping mode.
- switch (mmode)
- {
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_ONLY:
- prot = PROT_READ;
- flags = MAP_SHARED;
- break;
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_WRITE:
- prot = PROT_READ|PROT_WRITE;
- flags = MAP_SHARED;
- break;
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_WRITE_COPY:
- prot = PROT_READ|PROT_WRITE;
- flags = MAP_PRIVATE;
- break;
- default:
- return -1;
- }
-
- mapAddress = mmap(0, (size_t)(size&0x7fffffff), prot, flags,fd,(off_t)(alignment&0x7fffffff));
- if (mapAddress == MAP_FAILED)
- {
- return -1;
- }
- return (jlong) mapAddress;
-}
-
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemory.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemory.c?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemory.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemory.c Mon Jul 10 04:29:15 2006
@@ -180,3 +180,55 @@
{
*(jdouble *) address = value;
}
+
+/*
+ * Class: org_apache_harmony_luni_platform_OSMemory
+ * Method: unmapImpl
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSMemory_unmapImpl
+ (JNIEnv * env, jobject thiz, jlong fd)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ hymmap_unmap_file((void *)fd);
+}
+
+/*
+ * Class: org_apache_harmony_luni_platform_OSMemory
+ * Method: mmapImpl
+ * Signature: (JJJI)J
+ */
+JNIEXPORT jlong JNICALL Java_org_apache_harmony_luni_platform_OSMemory_mmapImpl
+ (JNIEnv * env, jobject thiz, jlong fd, jlong alignment, jlong size, jint mmode)
+{
+ PORT_ACCESS_FROM_ENV (env);
+ void *mapAddress = NULL;
+ I_32 mapmode = 0;
+
+ // Convert from Java mapping mode to port library mapping mode.
+ /* TPE - removed until portlib fixed
+ switch (mmode)
+ {
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_ONLY:
+ mapmode = HYPORT_MMAP_CAPABILITY_READ;
+ break;
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_WRITE:
+ mapmode = HYPORT_MMAP_CAPABILITY_READ|HYPORT_MMAP_CAPABILITY_WRITE;
+ break;
+ case org_apache_harmony_luni_platform_IMemorySystem_MMAP_WRITE_COPY:
+ mapmode = HYPORT_MMAP_CAPABILITY_COPYONWRITE;
+ break;
+ default:
+ return -1;
+ }
+
+ hymmap_map_filehandler((void *)fd, &mapAddress, mapmode, (IDATA)alignment, (IDATA)size);
+ */
+
+ if (mapAddress == NULL)
+ {
+ return -1;
+ }
+
+ return (jlong) mapAddress;
+}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemoryWin32.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemoryWin32.c?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemoryWin32.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/native/luni/windows/OSMemoryWin32.c Mon Jul 10 04:29:15 2006
@@ -21,7 +21,6 @@
#include <string.h>
#include <windows.h>
#include "OSMemory.h"
-#include "IMemorySystem.h"
JNIEXPORT jboolean JNICALL Java_org_apache_harmony_luni_platform_OSMemory_isLittleEndianImpl
(JNIEnv * env, jclass clazz)
@@ -94,60 +93,3 @@
return (jint)FlushViewOfFile((void *)addr, (SIZE_T)size);
}
-/*
- * Class: org_apache_harmony_luni_platform_OSMemory
- * Method: unmapImpl
- * Signature: (J)V
- */
-JNIEXPORT void JNICALL Java_org_apache_harmony_luni_platform_OSMemory_unmapImpl
- (JNIEnv * env, jobject thiz, jlong fd)
-{
- UnmapViewOfFile ((HANDLE)fd);
-}
-
-/*
- * Class: org_apache_harmony_luni_platform_OSMemory
- * Method: mmapImpl
- * Signature: (JJJI)J
- */
-JNIEXPORT jlong JNICALL Java_org_apache_harmony_luni_platform_OSMemory_mmapImpl
- (JNIEnv * env, jobject thiz, jlong fd, jlong alignment, jlong size, jint mmode)
-{
- void *mapAddress = NULL;
- int mapmode = 0;
- int protect = 0;
- HANDLE mapping;
-
- switch (mmode)
- {
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_ONLY:
- mapmode = FILE_MAP_READ;
- protect = PAGE_READONLY;
- break;
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_READ_WRITE:
- mapmode = FILE_MAP_WRITE;
- protect = PAGE_READWRITE;
- break;
- case org_apache_harmony_luni_platform_IMemorySystem_MMAP_WRITE_COPY:
- mapmode = FILE_MAP_COPY;
- protect = PAGE_WRITECOPY;
- break;
- default:
- return -1;
- }
-
- mapping = CreateFileMapping ((HANDLE)fd, NULL, protect, 0, 0, NULL);
- if (mapping == NULL)
- {
- return -1;
- }
- mapAddress = MapViewOfFile (mapping, mapmode, (DWORD)((alignment>>0x20)&0x7fffffff), (DWORD)(alignment&0xffffffff), (SIZE_T)(size&0xffffffff));
- CloseHandle (mapping);
-
- if (mapAddress == NULL)
- {
- return -1;
- }
-
- return (jlong) mapAddress;
-}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/FileChannelImpl.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/FileChannelImpl.java?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/FileChannelImpl.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/org/apache/harmony/nio/internal/FileChannelImpl.java Mon Jul 10 04:29:15 2006
@@ -188,9 +188,6 @@
protected final MappedByteBuffer mapImpl(int mapMode, long position,
long size) throws IOException {
- if (position + size > size()) {
- fileSystem.truncate(handle, position + size);
- }
long alignment = position - position % NATIVE_PAGE_SIZE;
int offset = (int) (position - alignment);
PlatformAddress address = memorySystem.mmap(handle, alignment, size
Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/common/org/apache/harmony/tests/java/nio/channels/FileChannelTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/common/org/apache/harmony/tests/java/nio/channels/FileChannelTest.java?rev=420495&r1=420494&r2=420495&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/common/org/apache/harmony/tests/java/nio/channels/FileChannelTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/test/java/common/org/apache/harmony/tests/java/nio/channels/FileChannelTest.java Mon Jul 10 04:29:15 2006
@@ -21,11 +21,8 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
-import java.io.UnsupportedEncodingException;
-import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
-import java.nio.ReadOnlyBufferException;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
@@ -34,14 +31,13 @@
import java.nio.channels.OverlappingFileLockException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
-import java.nio.channels.FileChannel.MapMode;
import java.util.Arrays;
import junit.framework.TestCase;
public class FileChannelTest extends TestCase {
- private static final String CONTENT = "it is content of a string for test";
+ private static final String CONTENT = "MYTESTSTRING";
private static final int CONTENT_LENGTH = CONTENT.length();
@@ -65,16 +61,6 @@
private FileInputStream fis;
private FileLock fileLock;
-
- private static final byte[] TEST_BYTES;
-
- static {
- try {
- TEST_BYTES = "test".getBytes("iso8859-1");
- } catch (UnsupportedEncodingException e) {
- throw new Error(e);
- }
- }
protected void setUp() throws Exception {
fileOfReadOnlyFileChannel = File.createTempFile(
@@ -520,17 +506,17 @@
int truncateLength = CONTENT_LENGTH + 2;
assertEquals(readWriteFileChannel, readWriteFileChannel
.truncate(truncateLength));
- assertEquals(CONTENT_LENGTH, readWriteFileChannel.size());
+ assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length());
truncateLength = CONTENT_LENGTH;
assertEquals(readWriteFileChannel, readWriteFileChannel
.truncate(truncateLength));
- assertEquals(CONTENT_LENGTH, readWriteFileChannel.size());
+ assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length());
truncateLength = CONTENT_LENGTH / 2;
assertEquals(readWriteFileChannel, readWriteFileChannel
.truncate(truncateLength));
- assertEquals(truncateLength, readWriteFileChannel.size());
+ assertEquals(truncateLength, fileOfReadWriteFileChannel.length());
}
/**
@@ -985,249 +971,6 @@
// Below assertion fails on RI. RI behaviour is counter to spec.
assertEquals(10, f.getChannel().position());
}
-
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_AbnormalMode() throws IOException {
- try {
- writeOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH);
- fail("should throw NonReadableChannelException.");
- } catch (NonReadableChannelException ex) {
- // expected;
- }
- try {
- writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH);
- fail("should throw NonReadableChannelException.");
- } catch (NonReadableChannelException ex) {
- // expected;
- }
- try {
- writeOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH);
- fail("should throw NonReadableChannelException.");
- } catch (NonReadableChannelException ex) {
- // expected;
- }
- writeOnlyFileChannel.close();
- try {
- writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
- fail("should throw ClosedChannelExeption.");
- } catch (ClosedChannelException ex) {
- // expected;
- }
-
- try {
- readOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH);
- fail("should throw NonWritableChannelException .");
- } catch (NonWritableChannelException ex) {
- // expected;
- }
- try {
- readOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH);
- fail("should throw NonWritableChannelException .");
- } catch (NonWritableChannelException ex) {
- // expected;
- }
- try {
- readOnlyFileChannel.map(MapMode.READ_WRITE, -1, CONTENT_LENGTH);
- fail("should throw IAE.");
- } catch (IllegalArgumentException ex) {
- // expected;
- }
- try {
- readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
- fail("should throw IAE.");
- } catch (IllegalArgumentException ex) {
- // expected;
- }
-
- try {
- readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH + 1);
- fail("should throw IOException.");
- } catch (IOException ex) {
- // expected;
- }
- try {
- readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1);
- fail("should throw IOException.");
- } catch (IOException ex) {
- // expected;
- }
-
- readOnlyFileChannel.close();
- try {
- readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
- fail("should throw ClosedChannelExeption.");
- } catch (ClosedChannelException ex) {
- // expected;
- }
- try {
- readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1);
- fail("should throw IOException.");
- } catch (IOException ex) {
- // expected;
- }
-
- readWriteFileChannel.close();
- try {
- readWriteFileChannel.map(MapMode.READ_WRITE, 0, -1);
- fail("should throw ClosedChannelExeption.");
- } catch (ClosedChannelException ex) {
- // expected;
- }
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_ReadOnly_CloseChannel() throws IOException {
- // close channel has no effect on map if mapped
- assertEquals(0, readWriteFileChannel.size());
- MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_ONLY,
- 0, CONTENT_LENGTH);
- assertEquals(CONTENT_LENGTH, readWriteFileChannel.size());
- readOnlyFileChannel.close();
- assertEquals(CONTENT_LENGTH, mapped.limit());
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_Private_CloseChannel() throws IOException {
- MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0,
- CONTENT_LENGTH);
- readWriteFileChannel.close();
- mapped.put(TEST_BYTES);
- assertEquals(CONTENT_LENGTH, mapped.limit());
- assertEquals("test".length(), mapped.position());
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_ReadOnly() throws IOException {
- MappedByteBuffer mapped = null;
- // try put something to readonly map
- writeDataToFile(fileOfReadOnlyFileChannel);
- mapped = readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH);
- try {
- mapped.put(TEST_BYTES);
- fail("should throw ReadOnlyBufferException.");
- } catch (ReadOnlyBufferException ex) {
- // expected;
- }
- assertEquals(CONTENT_LENGTH, mapped.limit());
- assertEquals(CONTENT_LENGTH, mapped.capacity());
- assertEquals(0, mapped.position());
-
- // try to get a readonly map from read/write channel
- writeDataToFile(fileOfReadWriteFileChannel);
- mapped = readWriteFileChannel.map(MapMode.READ_ONLY, 0, CONTENT
- .length());
- assertEquals(CONTENT_LENGTH, mapped.limit());
- assertEquals(CONTENT_LENGTH, mapped.capacity());
- assertEquals(0, mapped.position());
-
- // map not change channel's position
- assertEquals(0, readOnlyFileChannel.position());
- assertEquals(0, readWriteFileChannel.position());
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_ReadOnly_NonZeroPosition() throws IOException {
- this.writeDataToFile(fileOfReadOnlyFileChannel);
- MappedByteBuffer mapped = readOnlyFileChannel.map(MapMode.READ_ONLY,
- 10, CONTENT_LENGTH - 10);
- assertEquals(CONTENT_LENGTH - 10, mapped.limit());
- assertEquals(CONTENT_LENGTH - 10, mapped.capacity());
- assertEquals(0, mapped.position());
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_Private() throws IOException {
- this.writeDataToFile(fileOfReadWriteFileChannel);
- MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0,
- CONTENT_LENGTH);
- assertEquals(CONTENT_LENGTH, mapped.limit());
- // test copy on write if private
- ByteBuffer returnByPut = mapped.put(TEST_BYTES);
- assertSame(returnByPut, mapped);
- ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
- mapped.force();
- readWriteFileChannel.read(checkBuffer);
- assertEquals(CONTENT, new String(checkBuffer.array(), "iso8859-1"));
-
- // test overflow
- try {
- mapped.put(("test" + CONTENT).getBytes("iso8859-1"));
- fail("should throw BufferOverflowException.");
- } catch (BufferOverflowException ex) {
- // expected;
- }
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_Private_NonZeroPosition() throws IOException {
- MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 10,
- CONTENT_LENGTH - 10);
- assertEquals(CONTENT_LENGTH - 10, mapped.limit());
- assertEquals(CONTENT_LENGTH - 10, mapped.capacity());
- assertEquals(0, mapped.position());
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_ReadWrite() throws IOException {
- MappedByteBuffer mapped = null;
- writeDataToFile(fileOfReadWriteFileChannel);
- mapped = readWriteFileChannel.map(MapMode.READ_WRITE, 0, CONTENT
- .length());
-
- // put something will change its channel
- ByteBuffer returnByPut = mapped.put(TEST_BYTES);
- assertSame(returnByPut, mapped);
- String checkString = "test" + CONTENT.substring(4);
- ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
- mapped.force();
- readWriteFileChannel.position(0);
- readWriteFileChannel.read(checkBuffer);
- assertEquals(checkString, new String(checkBuffer.array(), "iso8859-1"));
-
- try {
- mapped.put(("test" + CONTENT).getBytes("iso8859-1"));
- fail("should throw BufferOverflowException.");
- } catch (BufferOverflowException ex) {
- // expected;
- }
- }
-
- /**
- * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
- */
- public void test_map_ReadWrite_NonZeroPosition() throws IOException {
- // test position non-zero
- writeDataToFile(fileOfReadWriteFileChannel);
- MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_WRITE,
- 10, CONTENT_LENGTH - 10);
- assertEquals(CONTENT_LENGTH - 10, mapped.limit());
- assertEquals(CONTENT.length() - 10, mapped.capacity());
- assertEquals(0, mapped.position());
- mapped.put(TEST_BYTES);
- ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
- readWriteFileChannel.read(checkBuffer);
- String expected = CONTENT.substring(0, 10) + "test"
- + CONTENT.substring(10 + "test".length());
- assertEquals(expected, new String(checkBuffer.array(), "iso8859-1"));
- }
-
private class MockFileChannel extends FileChannel {