386 lines
11 KiB
Java
386 lines
11 KiB
Java
import java.io.EOFException;
|
|
import java.io.IOException;
|
|
import net.runelite.mapping.Export;
|
|
import net.runelite.mapping.Implements;
|
|
import net.runelite.mapping.ObfuscatedGetter;
|
|
import net.runelite.mapping.ObfuscatedName;
|
|
import net.runelite.mapping.ObfuscatedSignature;
|
|
|
|
@ObfuscatedName("mn")
|
|
@Implements("BufferedFile")
|
|
public class BufferedFile {
|
|
@ObfuscatedName("o")
|
|
@ObfuscatedSignature(
|
|
signature = "Lmy;"
|
|
)
|
|
@Export("accessFile")
|
|
AccessFile accessFile;
|
|
@ObfuscatedName("q")
|
|
@Export("readBuffer")
|
|
byte[] readBuffer;
|
|
@ObfuscatedName("j")
|
|
@ObfuscatedGetter(
|
|
longValue = 183648846884359197L
|
|
)
|
|
@Export("readBufferOffset")
|
|
long readBufferOffset;
|
|
@ObfuscatedName("p")
|
|
@ObfuscatedGetter(
|
|
intValue = 1553809797
|
|
)
|
|
@Export("readBufferLength")
|
|
int readBufferLength;
|
|
@ObfuscatedName("g")
|
|
@Export("writeBuffer")
|
|
byte[] writeBuffer;
|
|
@ObfuscatedName("n")
|
|
@ObfuscatedGetter(
|
|
longValue = -2985208532115456417L
|
|
)
|
|
@Export("writeBufferOffset")
|
|
long writeBufferOffset;
|
|
@ObfuscatedName("u")
|
|
@ObfuscatedGetter(
|
|
intValue = 457646537
|
|
)
|
|
@Export("writeBufferLength")
|
|
int writeBufferLength;
|
|
@ObfuscatedName("a")
|
|
@ObfuscatedGetter(
|
|
longValue = 2498512168954711415L
|
|
)
|
|
@Export("offset")
|
|
long offset;
|
|
@ObfuscatedName("z")
|
|
@ObfuscatedGetter(
|
|
longValue = -3113265757492371609L
|
|
)
|
|
@Export("fileLength")
|
|
long fileLength;
|
|
@ObfuscatedName("w")
|
|
@ObfuscatedGetter(
|
|
longValue = 6675249402129041573L
|
|
)
|
|
@Export("length")
|
|
long length;
|
|
@ObfuscatedName("y")
|
|
@ObfuscatedGetter(
|
|
longValue = 1854591788033998237L
|
|
)
|
|
@Export("fileOffset")
|
|
long fileOffset;
|
|
|
|
@ObfuscatedSignature(
|
|
signature = "(Lmy;II)V"
|
|
)
|
|
public BufferedFile(AccessFile var1, int var2, int var3) throws IOException {
|
|
this.readBufferOffset = -1L;
|
|
this.writeBufferOffset = -1L;
|
|
this.writeBufferLength = 0;
|
|
this.accessFile = var1;
|
|
this.length = this.fileLength = var1.length();
|
|
this.readBuffer = new byte[var2];
|
|
this.writeBuffer = new byte[var3];
|
|
this.offset = 0L;
|
|
}
|
|
|
|
@ObfuscatedName("m")
|
|
@ObfuscatedSignature(
|
|
signature = "(I)V",
|
|
garbageValue = "159388731"
|
|
)
|
|
@Export("close")
|
|
public void close() throws IOException {
|
|
this.flush();
|
|
this.accessFile.close();
|
|
}
|
|
|
|
@ObfuscatedName("o")
|
|
@Export("seek")
|
|
public void seek(long var1) throws IOException {
|
|
if (var1 < 0L) {
|
|
throw new IOException("");
|
|
} else {
|
|
this.offset = var1;
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("q")
|
|
@ObfuscatedSignature(
|
|
signature = "(I)J",
|
|
garbageValue = "243378114"
|
|
)
|
|
@Export("length")
|
|
public long length() {
|
|
return this.length;
|
|
}
|
|
|
|
@ObfuscatedName("j")
|
|
@ObfuscatedSignature(
|
|
signature = "([BI)V",
|
|
garbageValue = "1810550632"
|
|
)
|
|
@Export("readFully")
|
|
public void readFully(byte[] var1) throws IOException {
|
|
this.read(var1, 0, var1.length);
|
|
}
|
|
|
|
@ObfuscatedName("p")
|
|
@ObfuscatedSignature(
|
|
signature = "([BIIB)V",
|
|
garbageValue = "-4"
|
|
)
|
|
@Export("read")
|
|
public void read(byte[] var1, int var2, int var3) throws IOException {
|
|
try {
|
|
if (var3 + var2 > var1.length) {
|
|
throw new ArrayIndexOutOfBoundsException(var3 + var2 - var1.length);
|
|
}
|
|
|
|
if (this.writeBufferOffset != -1L && this.offset >= this.writeBufferOffset && (long)var3 + this.offset <= this.writeBufferOffset + (long)this.writeBufferLength) {
|
|
System.arraycopy(this.writeBuffer, (int)(this.offset - this.writeBufferOffset), var1, var2, var3);
|
|
this.offset += (long)var3;
|
|
return;
|
|
}
|
|
|
|
long var4 = this.offset;
|
|
int var7 = var3;
|
|
int var8;
|
|
if (this.offset >= this.readBufferOffset && this.offset < (long)this.readBufferLength + this.readBufferOffset) {
|
|
var8 = (int)((long)this.readBufferLength - (this.offset - this.readBufferOffset));
|
|
if (var8 > var3) {
|
|
var8 = var3;
|
|
}
|
|
|
|
System.arraycopy(this.readBuffer, (int)(this.offset - this.readBufferOffset), var1, var2, var8);
|
|
this.offset += (long)var8;
|
|
var2 += var8;
|
|
var3 -= var8;
|
|
}
|
|
|
|
if (var3 > this.readBuffer.length) {
|
|
this.accessFile.seek(this.offset);
|
|
|
|
for (this.fileOffset = this.offset; var3 > 0; var3 -= var8) {
|
|
var8 = this.accessFile.read(var1, var2, var3);
|
|
if (var8 == -1) {
|
|
break;
|
|
}
|
|
|
|
this.fileOffset += (long)var8;
|
|
this.offset += (long)var8;
|
|
var2 += var8;
|
|
}
|
|
} else if (var3 > 0) {
|
|
this.load();
|
|
var8 = var3;
|
|
if (var3 > this.readBufferLength) {
|
|
var8 = this.readBufferLength;
|
|
}
|
|
|
|
System.arraycopy(this.readBuffer, 0, var1, var2, var8);
|
|
var2 += var8;
|
|
var3 -= var8;
|
|
this.offset += (long)var8;
|
|
}
|
|
|
|
if (this.writeBufferOffset != -1L) {
|
|
if (this.writeBufferOffset > this.offset && var3 > 0) {
|
|
var8 = var2 + (int)(this.writeBufferOffset - this.offset);
|
|
if (var8 > var3 + var2) {
|
|
var8 = var3 + var2;
|
|
}
|
|
|
|
while (var2 < var8) {
|
|
var1[var2++] = 0;
|
|
--var3;
|
|
++this.offset;
|
|
}
|
|
}
|
|
|
|
long var13 = -1L;
|
|
long var10 = -1L;
|
|
if (this.writeBufferOffset >= var4 && this.writeBufferOffset < var4 + (long)var7) {
|
|
var13 = this.writeBufferOffset;
|
|
} else if (var4 >= this.writeBufferOffset && var4 < this.writeBufferOffset + (long)this.writeBufferLength) {
|
|
var13 = var4;
|
|
}
|
|
|
|
if ((long)this.writeBufferLength + this.writeBufferOffset > var4 && (long)this.writeBufferLength + this.writeBufferOffset <= var4 + (long)var7) {
|
|
var10 = (long)this.writeBufferLength + this.writeBufferOffset;
|
|
} else if (var4 + (long)var7 > this.writeBufferOffset && (long)var7 + var4 <= this.writeBufferOffset + (long)this.writeBufferLength) {
|
|
var10 = var4 + (long)var7;
|
|
}
|
|
|
|
if (var13 > -1L && var10 > var13) {
|
|
int var12 = (int)(var10 - var13);
|
|
System.arraycopy(this.writeBuffer, (int)(var13 - this.writeBufferOffset), var1, (int)(var13 - var4) + var2, var12);
|
|
if (var10 > this.offset) {
|
|
var3 = (int)((long)var3 - (var10 - this.offset));
|
|
this.offset = var10;
|
|
}
|
|
}
|
|
}
|
|
} catch (IOException var16) {
|
|
this.fileOffset = -1L;
|
|
throw var16;
|
|
}
|
|
|
|
if (var3 > 0) {
|
|
throw new EOFException();
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("g")
|
|
@ObfuscatedSignature(
|
|
signature = "(I)V",
|
|
garbageValue = "1659142795"
|
|
)
|
|
@Export("load")
|
|
void load() throws IOException {
|
|
this.readBufferLength = 0;
|
|
if (this.offset != this.fileOffset) {
|
|
this.accessFile.seek(this.offset);
|
|
this.fileOffset = this.offset;
|
|
}
|
|
|
|
int var2;
|
|
for (this.readBufferOffset = this.offset; this.readBufferLength < this.readBuffer.length; this.readBufferLength += var2) {
|
|
int var1 = this.readBuffer.length - this.readBufferLength;
|
|
if (var1 > 200000000) {
|
|
var1 = 200000000;
|
|
}
|
|
|
|
var2 = this.accessFile.read(this.readBuffer, this.readBufferLength, var1);
|
|
if (var2 == -1) {
|
|
break;
|
|
}
|
|
|
|
this.fileOffset += (long)var2;
|
|
}
|
|
|
|
}
|
|
|
|
@ObfuscatedName("n")
|
|
@ObfuscatedSignature(
|
|
signature = "([BIII)V",
|
|
garbageValue = "1917244707"
|
|
)
|
|
@Export("write")
|
|
public void write(byte[] var1, int var2, int var3) throws IOException {
|
|
try {
|
|
if (this.offset + (long)var3 > this.length) {
|
|
this.length = (long)var3 + this.offset;
|
|
}
|
|
|
|
if (this.writeBufferOffset != -1L && (this.offset < this.writeBufferOffset || this.offset > (long)this.writeBufferLength + this.writeBufferOffset)) {
|
|
this.flush();
|
|
}
|
|
|
|
if (this.writeBufferOffset != -1L && this.offset + (long)var3 > this.writeBufferOffset + (long)this.writeBuffer.length) {
|
|
int var4 = (int)((long)this.writeBuffer.length - (this.offset - this.writeBufferOffset));
|
|
System.arraycopy(var1, var2, this.writeBuffer, (int)(this.offset - this.writeBufferOffset), var4);
|
|
this.offset += (long)var4;
|
|
var2 += var4;
|
|
var3 -= var4;
|
|
this.writeBufferLength = this.writeBuffer.length;
|
|
this.flush();
|
|
}
|
|
|
|
if (var3 <= this.writeBuffer.length) {
|
|
if (var3 > 0) {
|
|
if (-1L == this.writeBufferOffset) {
|
|
this.writeBufferOffset = this.offset;
|
|
}
|
|
|
|
System.arraycopy(var1, var2, this.writeBuffer, (int)(this.offset - this.writeBufferOffset), var3);
|
|
this.offset += (long)var3;
|
|
if (this.offset - this.writeBufferOffset > (long)this.writeBufferLength) {
|
|
this.writeBufferLength = (int)(this.offset - this.writeBufferOffset);
|
|
}
|
|
|
|
}
|
|
} else {
|
|
if (this.fileOffset != this.offset) {
|
|
this.accessFile.seek(this.offset);
|
|
this.fileOffset = this.offset;
|
|
}
|
|
|
|
this.accessFile.write(var1, var2, var3);
|
|
this.fileOffset += (long)var3;
|
|
if (this.fileOffset > this.fileLength) {
|
|
this.fileLength = this.fileOffset;
|
|
}
|
|
|
|
long var9 = -1L;
|
|
long var6 = -1L;
|
|
if (this.offset >= this.readBufferOffset && this.offset < (long)this.readBufferLength + this.readBufferOffset) {
|
|
var9 = this.offset;
|
|
} else if (this.readBufferOffset >= this.offset && this.readBufferOffset < this.offset + (long)var3) {
|
|
var9 = this.readBufferOffset;
|
|
}
|
|
|
|
if (this.offset + (long)var3 > this.readBufferOffset && (long)var3 + this.offset <= this.readBufferOffset + (long)this.readBufferLength) {
|
|
var6 = (long)var3 + this.offset;
|
|
} else if ((long)this.readBufferLength + this.readBufferOffset > this.offset && (long)this.readBufferLength + this.readBufferOffset <= (long)var3 + this.offset) {
|
|
var6 = this.readBufferOffset + (long)this.readBufferLength;
|
|
}
|
|
|
|
if (var9 > -1L && var6 > var9) {
|
|
int var8 = (int)(var6 - var9);
|
|
System.arraycopy(var1, (int)(var9 + (long)var2 - this.offset), this.readBuffer, (int)(var9 - this.readBufferOffset), var8);
|
|
}
|
|
|
|
this.offset += (long)var3;
|
|
}
|
|
} catch (IOException var12) {
|
|
this.fileOffset = -1L;
|
|
throw var12;
|
|
}
|
|
}
|
|
|
|
@ObfuscatedName("u")
|
|
@ObfuscatedSignature(
|
|
signature = "(I)V",
|
|
garbageValue = "-1996252506"
|
|
)
|
|
@Export("flush")
|
|
void flush() throws IOException {
|
|
if (this.writeBufferOffset != -1L) {
|
|
if (this.writeBufferOffset != this.fileOffset) {
|
|
this.accessFile.seek(this.writeBufferOffset);
|
|
this.fileOffset = this.writeBufferOffset;
|
|
}
|
|
|
|
this.accessFile.write(this.writeBuffer, 0, this.writeBufferLength);
|
|
this.fileOffset += (long)this.writeBufferLength * -743906103946903551L;
|
|
if (this.fileOffset > this.fileLength) {
|
|
this.fileLength = this.fileOffset;
|
|
}
|
|
|
|
long var1 = -1L;
|
|
long var3 = -1L;
|
|
if (this.writeBufferOffset >= this.readBufferOffset && this.writeBufferOffset < this.readBufferOffset + (long)this.readBufferLength) {
|
|
var1 = this.writeBufferOffset;
|
|
} else if (this.readBufferOffset >= this.writeBufferOffset && this.readBufferOffset < this.writeBufferOffset + (long)this.writeBufferLength) {
|
|
var1 = this.readBufferOffset;
|
|
}
|
|
|
|
if (this.writeBufferOffset + (long)this.writeBufferLength > this.readBufferOffset && this.writeBufferOffset + (long)this.writeBufferLength <= this.readBufferOffset + (long)this.readBufferLength) {
|
|
var3 = this.writeBufferOffset + (long)this.writeBufferLength;
|
|
} else if (this.readBufferOffset + (long)this.readBufferLength > this.writeBufferOffset && (long)this.readBufferLength + this.readBufferOffset <= (long)this.writeBufferLength + this.writeBufferOffset) {
|
|
var3 = this.readBufferOffset + (long)this.readBufferLength;
|
|
}
|
|
|
|
if (var1 > -1L && var3 > var1) {
|
|
int var5 = (int)(var3 - var1);
|
|
System.arraycopy(this.writeBuffer, (int)(var1 - this.writeBufferOffset), this.readBuffer, (int)(var1 - this.readBufferOffset), var5);
|
|
}
|
|
|
|
this.writeBufferOffset = -1L;
|
|
this.writeBufferLength = 0;
|
|
}
|
|
|
|
}
|
|
}
|