From c67f700fa91c75b88c358670e762147b15eab2cc Mon Sep 17 00:00:00 2001 From: payonel Date: Sun, 3 Feb 2019 19:51:38 -0800 Subject: [PATCH] use ByteBuffer to deal with transferFrom transferFrom giving us grief on some platforms (openjdk for arch and debian) ByteBuffer appears to be more reliable closes #3038 closes #3031 --- src/main/scala/li/cil/oc/server/fs/Buffered.scala | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/scala/li/cil/oc/server/fs/Buffered.scala b/src/main/scala/li/cil/oc/server/fs/Buffered.scala index b7040227a..bafbc7201 100644 --- a/src/main/scala/li/cil/oc/server/fs/Buffered.scala +++ b/src/main/scala/li/cil/oc/server/fs/Buffered.scala @@ -2,6 +2,7 @@ package li.cil.oc.server.fs import java.io import java.io.FileNotFoundException +import java.nio.ByteBuffer import java.util.concurrent.CancellationException import java.util.concurrent.Future import java.util.concurrent.TimeUnit @@ -131,7 +132,19 @@ trait Buffered extends OutputStreamFileSystem { childFile.createNewFile() val out = new io.FileOutputStream(childFile).getChannel val in = openInputChannel(childPath).get - out.transferFrom(in, 0, Long.MaxValue) + + val buffer = ByteBuffer.allocateDirect(16 * 1024) + while (in.read(buffer) != -1) { + buffer.flip() + out.write(buffer) + buffer.compact() + } + + buffer.flip() + while (buffer.hasRemaining) { + out.write(buffer) + } + out.close() in.close() childFile.setLastModified(time)