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
    Gibt die Byte-Größe eines Eintrags zurück
    default byte[]
    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
    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
  • Method Details

    • getFirst

      default void getFirst(byte[] result) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getLast

      default void getLast(byte[] result) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getEntries

      void getEntries(long entryIndex, int numEntries, byte[] result, int destPos) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getEntries

      default void getEntries(long entryIndex, int numEntries, byte[] result) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setEntries

      void setEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setEntries

      default void setEntries(long entryIndex, int numEntries, byte[] data) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • insertEntries

      default void insertEntries(long entryIndex, int numEntries, byte[] data) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • insertEntries

      void insertEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • numEntries

      long numEntries() throws IOException
      Gibt die Anzahl Einträge zurück
      Returns:
      die Anzahl Einträge
      Throws:
      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 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • addLast

      default void addLast(byte[] data) throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getAll

      default byte[] getAll() throws 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:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • deleteEntryAtIndex

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