diff --git a/src/main/java/org/apache/commons/io/input/MemoryMappedFileInputStream.java b/src/main/java/org/apache/commons/io/input/MemoryMappedFileInputStream.java index a1f5d2144b7..b9ca1191b02 100644 --- a/src/main/java/org/apache/commons/io/input/MemoryMappedFileInputStream.java +++ b/src/main/java/org/apache/commons/io/input/MemoryMappedFileInputStream.java @@ -234,7 +234,7 @@ public int read() throws IOException { return EOF; } } - return Short.toUnsignedInt(buffer.get()); + return buffer.get() & 0xFF; } @Override diff --git a/src/test/java/org/apache/commons/io/input/MemoryMappedFileInputStreamTest.java b/src/test/java/org/apache/commons/io/input/MemoryMappedFileInputStreamTest.java index 471874f1ee3..ebb5ef0e8fb 100644 --- a/src/test/java/org/apache/commons/io/input/MemoryMappedFileInputStreamTest.java +++ b/src/test/java/org/apache/commons/io/input/MemoryMappedFileInputStreamTest.java @@ -211,6 +211,18 @@ void testReadAfterClose(final int len) throws Exception { } } + @Test + void testReadSingleByteIsUnsigned() throws IOException { + final byte[] expectedData = { 0x00, 0x01, 0x7F, (byte) 0x80, (byte) 0xAB, (byte) 0xFE, (byte) 0xFF }; + final Path file = Files.write(Files.createTempFile(tempDir, null, null), expectedData); + try (InputStream inputStream = newInputStream(file, 4)) { + for (final byte expected : expectedData) { + assertEquals(expected & 0xFF, inputStream.read()); + } + assertEquals(IOUtils.EOF, inputStream.read()); + } + } + @Test void testReadSingleByte() throws IOException { // setup