From 3dcbb08c24ce42132cca1ad5df0ddddb756eae21 Mon Sep 17 00:00:00 2001 From: Antony Riley <antony@cyberiantiger.org> 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 f4405be395..5d2853b9ce 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; @@ -60,8 +63,16 @@ public class RegionFile { this.f.set(1, false); this.c.seek(0L); + // 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(int j1 = 0; j1 < 1024; ++j1) { - int k = this.c.readInt(); + int k = headerAsInts.get(); // Paper this.d[j1] = k; if (k != 0 && (k >> 8) + (k & 255) <= this.f.size()) { for(int l = 0; l < (k & 255); ++l) { @@ -71,7 +82,7 @@ public class RegionFile { } for(int k1 = 0; k1 < 1024; ++k1) { - int l1 = this.c.readInt(); + int l1 = headerAsInts.get(); // Paper this.e[k1] = l1; } } catch (IOException ioexception) { -- 2.19.0