Interface IndexStorage

All Known Implementing Classes:
BufferedIndexStorage, FileIndexStorage, HybridStorage, MemoryIndexStorage

public interface IndexStorage
Interface für die Low-Level-Speicherungsschicht für Indexe. Ein Index ist eine (sortierte) Liste von Index-Einträgen einer festen Byte-Größe. Einen Index kann man sich vorstellen wie eine Excel-Tabelle, wobei Implementierungen dieses Interfaces keine Informationen über die einzelnen Spalten benötigen oder wie die Bytes einer Zeile auf die einzelnen Spalten abgebildet werden. Klassen, die dieses Interface implementieren, speichern eine Menge von diesen Byte-Einträgen ab und ermöglichen einen wahlfreien Zugriff sowie das Hinzufügen von Einträgen.
  • Method Summary

    Modifier and Type Method Description
    default void addLast​(byte[] data)
    Fügt einen Eintrag ein.
    default void addLast​(byte[] data, int numEntries)
    Fügt Einträge am Ende ein.
    void deleteEntryAtIndex​(long entryIndex)
    Löscht den Eintrag am Index entryIndex
    int entryByteSize()
    Gibt die Byte-Größe eines Eintrags zurück
    void flush()  
    default byte[] getAll()
    Gibt alle Einträge als ein großes byte-Array zurück.
    default void getEntries​(long entryIndex, int numEntries, byte[] result)
    Gibt Einträge aus dem Index zurück
    void getEntries​(long entryIndex, int numEntries, byte[] result, int destPos)
    Gibt Einträge aus dem Index zurück
    default void getFirst​(byte[] result)
    Gibt den ersten (obersten) Eintrag des Index zurück
    default void getLast​(byte[] result)
    Gibt den letzten (untersten) Eintrag des Index zurück
    default void insertEntries​(long entryIndex, int numEntries, byte[] data)
    Fügt Einträge im Index ein, anders als bei setEntries(long, int, byte[]) werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.
    void insertEntries​(long entryIndex, int numEntries, byte[] data, int fromPos)
    Fügt Einträge im Index ein, anders als bei setEntries(long, int, byte[]) werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.
    long numEntries()
    Gibt die Anzahl Einträge zurück
    default void setEntries​(long entryIndex, int numEntries, byte[] data)
    Setzt Einträge im Index
    void setEntries​(long entryIndex, int numEntries, byte[] data, int fromPos)
    Setzt Einträge im Index
    default void setLast​(byte[] data)
    Setzt (überschreibt) den letzten Eintrag im Index
  • Method Details

    • getFirst

      default void getFirst​(byte[] result) throws java.io.IOException
      Gibt den ersten (obersten) Eintrag des Index zurück
      Parameters:
      result - Byte-Array in das das Ergebnis kopiert wird, muss mindestens entryByteSize() Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getLast

      default void getLast​(byte[] result) throws java.io.IOException
      Gibt den letzten (untersten) Eintrag des Index zurück
      Parameters:
      result - Byte-Array in das das Ergebnis kopiert wird, muss mindestens entryByteSize() Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setLast

      default void setLast​(byte[] data) throws java.io.IOException
      Setzt (überschreibt) den letzten Eintrag im Index
      Parameters:
      data - Byte-Array, das die letzte Spalte angibt, muss mindestens entryByteSize() Bytes groß sein. Weitere Bytes werden ignoriert.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getEntries

      void getEntries​(long entryIndex, int numEntries, byte[] result, int destPos) throws java.io.IOException
      Gibt Einträge aus dem Index zurück
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der angefragt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die angefragt werden sollen
      result - Byte-Array, in das das Ergebnis kopiert werden soll, muss mindestens destPos + (numEntries * entryByteSize()) Bytes groß sein.
      destPos - Ziel-Position im Byte-Array. Standardmäßig 0.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getEntries

      default void getEntries​(long entryIndex, int numEntries, byte[] result) throws java.io.IOException
      Gibt Einträge aus dem Index zurück
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der angefragt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die angefragt werden sollen
      result - Byte-Array, in das das Ergebnis kopiert werden soll, muss mindestens destPos + (numEntries * entryByteSize()) Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setEntries

      void setEntries​(long entryIndex, int numEntries, byte[] data, int fromPos) throws java.io.IOException
      Setzt Einträge im Index
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der gesetzt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die überschrieben werden sollen
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens fromPos + (numEntries * entryByteSize()) Bytes groß sein.
      fromPos - Von-Position im Byte-Array. Standardmäßig 0.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setEntries

      default void setEntries​(long entryIndex, int numEntries, byte[] data) throws java.io.IOException
      Setzt Einträge im Index
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der gesetzt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die überschrieben werden sollen
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens fromPos + (numEntries * entryByteSize()) Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • insertEntries

      default void insertEntries​(long entryIndex, int numEntries, byte[] data) throws java.io.IOException
      Fügt Einträge im Index ein, anders als bei setEntries(long, int, byte[]) werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.
      Parameters:
      entryIndex - Nullbasierte Position an der Eingefügt werden soll (neuer Index des ersten eingefügten Eintrags). Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die eingefügt werden sollen
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens (numEntries * entryByteSize()) Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • insertEntries

      void insertEntries​(long entryIndex, int numEntries, byte[] data, int fromPos) throws java.io.IOException
      Fügt Einträge im Index ein, anders als bei setEntries(long, int, byte[]) werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.
      Parameters:
      entryIndex - Nullbasierte Position an der Eingefügt werden soll (neuer Index des ersten eingefügten Eintrags). Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die eingefügt werden sollen
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens (numEntries * entryByteSize()) Bytes groß sein.
      fromPos - Von-Position im Byte-Array. Standardmäßig 0.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • numEntries

      long numEntries() throws java.io.IOException
      Gibt die Anzahl Einträge zurück
      Returns:
      die Anzahl Einträge
      Throws:
      java.io.IOException
    • entryByteSize

      int entryByteSize()
      Gibt die Byte-Größe eines Eintrags zurück
      Returns:
      die Byte-Größe eines Eintrags
    • addLast

      default void addLast​(byte[] data, int numEntries) throws java.io.IOException
      Fügt Einträge am Ende ein.
      Parameters:
      numEntries - Anzahl Einträge, die eingefügt werden sollen
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens (numEntries * entryByteSize()) Bytes groß sein.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • addLast

      default void addLast​(byte[] data) throws java.io.IOException
      Fügt einen Eintrag ein.
      Parameters:
      data - Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens entryByteSize() Bytes groß sein. Weitere Bytes werden ignoriert.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getAll

      default byte[] getAll() throws java.io.IOException
      Gibt alle Einträge als ein großes byte-Array zurück. Diese Methode verbraucht möglicherweise viel Speicher und hat eine fragwürdige Performance, ist daher hauptsächlich für Unit-Tests gedacht.
      Returns:
      Alle gespeicherten Daten.
      Throws:
      java.io.IOException - IO-Fehler (z. B. bei Dateizugriff)
    • deleteEntryAtIndex

      void deleteEntryAtIndex​(long entryIndex) throws java.io.IOException
      Löscht den Eintrag am Index entryIndex
      Parameters:
      entryIndex - Index, der gelöscht werden soll
      Throws:
      java.io.IOException
    • flush

      void flush() throws java.io.IOException
      Throws:
      java.io.IOException