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();
   }
}