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 entryIndexint
entryByteSize()
Gibt die Byte-Größe eines Eintrags zurückvoid
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ückvoid
getEntries(long entryIndex, int numEntries, byte[] result, int destPos)
Gibt Einträge aus dem Index zurückdefault void
getFirst(byte[] result)
Gibt den ersten (obersten) Eintrag des Index zurückdefault void
getLast(byte[] result)
Gibt den letzten (untersten) Eintrag des Index zurückdefault void
insertEntries(long entryIndex, int numEntries, byte[] data)
Fügt Einträge im Index ein, anders als beisetEntries(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 beisetEntries(long, int, byte[])
werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.long
numEntries()
Gibt die Anzahl Einträge zurückdefault void
setEntries(long entryIndex, int numEntries, byte[] data)
Setzt Einträge im Indexvoid
setEntries(long entryIndex, int numEntries, byte[] data, int fromPos)
Setzt Einträge im Indexdefault void
setLast(byte[] data)
Setzt (überschreibt) den letzten Eintrag im Index
-
Method Details
-
getFirst
default void getFirst(byte[] result) throws java.io.IOExceptionGibt den ersten (obersten) Eintrag des Index zurück- Parameters:
result
- Byte-Array in das das Ergebnis kopiert wird, muss mindestensentryByteSize()
Bytes groß sein.- Throws:
java.io.IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getLast
default void getLast(byte[] result) throws java.io.IOExceptionGibt den letzten (untersten) Eintrag des Index zurück- Parameters:
result
- Byte-Array in das das Ergebnis kopiert wird, muss mindestensentryByteSize()
Bytes groß sein.- Throws:
java.io.IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
setLast
default void setLast(byte[] data) throws java.io.IOExceptionSetzt (überschreibt) den letzten Eintrag im Index- Parameters:
data
- Byte-Array, das die letzte Spalte angibt, muss mindestensentryByteSize()
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.IOExceptionGibt 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-OffsetnumEntries
- Anzahl Einträge, die angefragt werden sollenresult
- 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.IOExceptionGibt 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-OffsetnumEntries
- Anzahl Einträge, die angefragt werden sollenresult
- 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.IOExceptionSetzt 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-OffsetnumEntries
- Anzahl Einträge, die überschrieben werden sollendata
- 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.IOExceptionSetzt 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-OffsetnumEntries
- Anzahl Einträge, die überschrieben werden sollendata
- 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.IOExceptionFügt Einträge im Index ein, anders als beisetEntries(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-OffsetnumEntries
- Anzahl Einträge, die eingefügt werden sollendata
- 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.IOExceptionFügt Einträge im Index ein, anders als beisetEntries(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-OffsetnumEntries
- Anzahl Einträge, die eingefügt werden sollendata
- 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.IOExceptionGibt 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.IOExceptionFügt Einträge am Ende ein.- Parameters:
numEntries
- Anzahl Einträge, die eingefügt werden sollendata
- 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.IOExceptionFügt einen Eintrag ein.- Parameters:
data
- Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestensentryByteSize()
Bytes groß sein. Weitere Bytes werden ignoriert.- Throws:
java.io.IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getAll
default byte[] getAll() throws java.io.IOExceptionGibt 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.IOExceptionLö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
-