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 TypeMethodDescriptiondefault 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
Gibt die Byte-Größe eines Eintrags zurückdefault 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
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 Index
-
Method Details
-
getFirst
Gibt den ersten (obersten) Eintrag des Index zurück- Parameters:
result
- Byte-Array in das das Ergebnis kopiert wird, muss mindestensentryByteSize()
Bytes groß sein.- Throws:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getLast
Gibt den letzten (untersten) Eintrag des Index zurück- Parameters:
result
- Byte-Array in das das Ergebnis kopiert wird, muss mindestensentryByteSize()
Bytes groß sein.- Throws:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getEntries
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-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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getEntries
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-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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
setEntries
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-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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
setEntries
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-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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
insertEntries
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.- 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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
insertEntries
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.- 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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
numEntries
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
Fü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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
addLast
Fü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:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getAll
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
Löscht den Eintrag am Index entryIndex- Parameters:
entryIndex
- Index, der gelöscht werden soll- Throws:
IOException
-