Paper/Spigot-Server-Patches/0087-Reduce-IO-ops-opening-a-new-region-file.patch

54 Zeilen
2.0 KiB
Diff

From 7e1a19b733518affda90a116c3576335ae14f565 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.18.0