diff --git a/0121-Reduce-IO-ops-opening-a-new-region-file.patch b/0121-Reduce-IO-ops-opening-a-new-region-file.patch new file mode 100644 index 000000000..1734b6f9e --- /dev/null +++ b/0121-Reduce-IO-ops-opening-a-new-region-file.patch @@ -0,0 +1,53 @@ +From 63f1582ef1596bca584ec4686f3c6e7a129243f9 Mon Sep 17 00:00:00 2001 +From: Antony Riley +Date: Tue, 29 Mar 2016 06:56:23 +0300 +Subject: [PATCH] Reduce IO ops opening a new region file. + + +diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java +index 68dd17d..d82f4a1 100644 +--- a/src/main/java/net/minecraft/server/RegionFile.java ++++ b/src/main/java/net/minecraft/server/RegionFile.java +@@ -8,9 +8,12 @@ import java.io.ByteArrayInputStream; + import java.io.ByteArrayOutputStream; + import java.io.DataInputStream; + import java.io.DataOutputStream; ++import java.io.EOFException; + import java.io.File; + import java.io.IOException; + import java.io.RandomAccessFile; ++import java.nio.ByteBuffer; ++import java.nio.IntBuffer; + import java.util.List; + import java.util.zip.DeflaterOutputStream; + import java.util.zip.GZIPInputStream; +@@ -67,8 +70,16 @@ public class RegionFile { + + int k; + ++ // Paper Start ++ ByteBuffer header = ByteBuffer.allocate(8192); ++ while (header.hasRemaining()) { ++ if (this.c.getChannel().read(header) == -1) throw new EOFException(); ++ } ++ header.clear(); ++ IntBuffer headerAsInts = header.asIntBuffer(); ++ // Paper End + for (j = 0; j < 1024; ++j) { +- k = this.c.readInt(); ++ k = headerAsInts.get(); // Paper + this.d[j] = k; + if (k != 0 && (k >> 8) + (k & 255) <= this.f.size()) { + for (int l = 0; l < (k & 255); ++l) { +@@ -78,7 +89,7 @@ public class RegionFile { + } + + for (j = 0; j < 1024; ++j) { +- k = this.c.readInt(); ++ k = headerAsInts.get(); // Paper + this.e[j] = k; + } + } catch (IOException ioexception) { +-- +1.9.1 +