BlockingDiskFile class
Пакет: com.hypixel.hytale.server.core.util.io
Файл: com/hypixel/hytale/server/core/util/io/BlockingDiskFile.java
Поля (11)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ReadWriteLock |
fileLock |
|
|
return |
|
File |
var1 |
|
File |
var1 |
|
|
var1 |
|
Path |
var2 |
|
StringWriter |
var2 |
|
ByteArrayOutputStream |
var3 |
|
byte[] |
var34 |
|
|
var34 |
|
BufferedWriter |
var4 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract abstract |
void |
createvoid create(BufferedWriter var1) |
abstract abstract |
void |
readvoid read(BufferedReader var1) |
public |
void |
syncLoadvoid syncLoad() |
public |
void |
syncSavevoid syncSave() |
abstract |
|
try try(ByteArrayOutputStream var3 = new ByteArrayOutputStream() |
abstract abstract |
void |
writevoid write(BufferedWriter var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.util.io;
class="kw">import com.hypixel.hytale.server.core.Options;
class="kw">import java.io.BufferedReader;
class="kw">import java.io.BufferedWriter;
class="kw">import java.io.ByteArrayInputStream;
class="kw">import java.io.ByteArrayOutputStream;
class="kw">import java.io.File;
class="kw">import java.io.IOException;
class="kw">import java.io.InputStreamReader;
class="kw">import java.io.OutputStreamWriter;
class="kw">import java.io.StringWriter;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.concurrent.locks.ReadWriteLock;
class="kw">import java.util.concurrent.locks.ReentrantReadWriteLock;
class="kw">import javax.annotation.Nonnull;
class="kw">public class="kw">abstract class BlockingDiskFile {
class="kw">protected class="kw">final ReadWriteLock fileLock = new ReentrantReadWriteLock();
class="kw">protected class="kw">final Path path;
class="kw">public BlockingDiskFile(Path var1) {
this.path = var1;
}
class="kw">protected class="kw">abstract void read(BufferedReader var1) class="kw">throws IOException;
class="kw">protected class="kw">abstract void write(BufferedWriter var1) class="kw">throws IOException;
class="kw">protected class="kw">abstract void create(BufferedWriter var1) class="kw">throws IOException;
class="kw">public void syncLoad() {
this.fileLock.writeLock().lock();
try {
File var1 = this.toLocalFile();
try {
if (!var1.exists()) {
Path var2 = this.path.resolveSibling(this.path.getFileName() + ".bak");
if (Files.exists(var2)) {
Files.move(var2, var1.toPath());
}
}
if (!var1.exists()) {
if (Options.isBare()) {
byte[] var34;
try (
ByteArrayOutputStream var3 = new ByteArrayOutputStream();
BufferedWriter var4 = new BufferedWriter(new OutputStreamWriter(var3, StandardCharsets.UTF_8));
) {
this.create(var4);
var4.flush();
var34 = var3.toByteArray();
}
try (BufferedReader var35 = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(var34), StandardCharsets.UTF_8))) {
this.read(var35);
class="kw">return;
}
}
try (BufferedWriter var32 = Files.newBufferedWriter(var1.toPath())) {
this.create(var32);
}
}
try (BufferedReader var33 = Files.newBufferedReader(var1.toPath())) {
this.read(var33);
}
} catch (Exception var30) {
throw new RuntimeException("Failed to syncLoad() " + var1.getAbsolutePath(), var30);
}
} class="kw">finally {
this.fileLock.writeLock().unlock();
}
}
class="kw">public void syncSave() {
File var1 = null;
this.fileLock.readLock().lock();
try {
var1 = this.toLocalFile();
StringWriter var2 = new StringWriter();
try (BufferedWriter var3 = new BufferedWriter(var2)) {
this.write(var3);
}
FileUtil.writeStringAtomic(var1.toPath(), var2.toString());
} catch (Exception var13) {
throw new RuntimeException("Failed to syncSave() " + (var1 != null ? var1.getAbsolutePath() : null), var13);
} class="kw">finally {
this.fileLock.readLock().unlock();
}
}
@Nonnull
class="kw">protected File toLocalFile() {
class="kw">return this.path.toFile();
}
}