Class FileBackedQueue<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
de.bsvrz.dav.daf.util.fileBackedQueue.FileBackedQueue<E>
- All Implemented Interfaces:
java.lang.Iterable<E>
,java.util.Collection<E>
,java.util.Queue<E>
- Direct Known Subclasses:
FileBackedByteQueue
,FileBackedIntQueue
,FileBackedLongQueue
,FileBackedShortQueue
,FileBackedStringQueue
public class FileBackedQueue<E>
extends java.util.AbstractQueue<E>
Eine Queue, die Elemente beim Überschreiten eines Grenzwertes ins Dateisystem auslagert und dadurch sehr viele Elemente aufnehmen kann. Diese Queue
ist abgesehen vom Iterator threadsicher. Je nach Konstruktor verwendet die Queue einen benutzerdefinierten Serializer um die Objekte im Dateisystem
abzulegen, oder den Standard-Java-Serializer. Es gibt vordefinierte geerbte Queue-Klassen, die für einfache Datentypen optimierte Serializer
benutzen. Für weitere Datentypen ist ein benutzerdefinierter
Diese Queue ist auf mehrere gleichzeitige Einfügungen von mehreren Threads spezialisiert. Das Auslesen von Objekten geht im allgemeinen sehr schnell, kann aber nur von einem Thread gleichzeitig durchgeführt werden.
Für das Speichern im Dateisystem werden die Objekte serialisiert. Das heißt, die Objekte, die zu der Queue hinzugefügt werden sind möglicherweise nicht identisch (im Sinne von Objektidentität) zu den Objekten, die aus der Queue ausgelesen werden.
QueueSerializer
zu implementieren. Wichtig: nachdem die Queue nicht mehr
gebraucht wird sollte clear()
aufgerufen werden um nicht mehr gebrauchten Speicher auf der Festplatte freizugeben.Diese Queue ist auf mehrere gleichzeitige Einfügungen von mehreren Threads spezialisiert. Das Auslesen von Objekten geht im allgemeinen sehr schnell, kann aber nur von einem Thread gleichzeitig durchgeführt werden.
Für das Speichern im Dateisystem werden die Objekte serialisiert. Das heißt, die Objekte, die zu der Queue hinzugefügt werden sind möglicherweise nicht identisch (im Sinne von Objektidentität) zu den Objekten, die aus der Queue ausgelesen werden.
-
Constructor Summary
Constructors Constructor Description FileBackedQueue(int memoryCapacity, long filesystemCapacity)
Erstellt eine neue Queue, die durch ein Dateisystem unterstützt wird und so recht groß werden kann.FileBackedQueue(int memoryCapacity, long filesystemCapacity, QueueSerializer<E> queueSerializer)
Erstellt eine neue Queue, die durch ein Dateisystem unterstützt wird und so recht groß werden kann. -
Method Summary
Modifier and Type Method Description void
clear()
Removes all of the elements from this queue.long
getDiskCapacity()
Gibt den maximal genutzen Festplattenplatz zurück, der von dieser Queue verwendet wird.long
getDiskUsed()
Gibt den Festplattenplatz zurück, der von dieser Queue in Benutzung ist.int
getMemoryCapacity()
Gibt die Kapazität des Caches in Bytes zurück, in dem die Objekte im Arbeitsspeicher gehalten werden.int
getMemoryUsed()
Gibt den Speicher zurück, den die Objekte im Arbeitsspeicher verwenden.java.util.Iterator<E>
iterator()
Returns an iterator over the elements contained in this collection.boolean
offer(E e)
Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions.E
peek()
Retrieves, but does not remove, the head of this queue, or returnsnull
if this queue is empty.E
poll()
Retrieves and removes the head of this queue, or returnsnull
if this queue is empty.int
size()
java.lang.String
toString()
Methods inherited from class java.util.AbstractQueue
add, addAll, element, remove
Methods inherited from class java.util.AbstractCollection
contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.util.Collection
contains, containsAll, equals, hashCode, isEmpty, parallelStream, remove, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray, toArray
Methods inherited from interface java.lang.Iterable
forEach
-
Constructor Details
-
FileBackedQueue
public FileBackedQueue(int memoryCapacity, long filesystemCapacity, QueueSerializer<E> queueSerializer)Erstellt eine neue Queue, die durch ein Dateisystem unterstützt wird und so recht groß werden kann. Um die Objekte in das Dateisystem zu speichern, ist erforderlich, dass ein QueueSerializer angegeben wird, der die Objekte serialisiert und wieder deserialisiert.- Parameters:
memoryCapacity
- Wie viel Speicher in Bytes maximal im Arbeitsspeicher gehalten werden sollen. Es handelt sich um einen Richtwert, der geringfügig (um die Größe eines Elements) überschritten werden kann. Berücksichtigt wird hier nicht der tatsächliche Arbeitsspeicherverbrauch, sondern die Größe, die das Element verbrauchen würde, falls es serialisiert werden würde.filesystemCapacity
- Wie viel Speicher in Bytes maximal im Dateisystem gehalten werden sollen. Es handelt sich um einen Richtwert, der geringfügig (um maximal die Größe eines Elements minus 1 Byte) überschritten werden kann.queueSerializer
- Klasse, die das Deserialisieren von Objekten übernimmt.
-
FileBackedQueue
public FileBackedQueue(int memoryCapacity, long filesystemCapacity)Erstellt eine neue Queue, die durch ein Dateisystem unterstützt wird und so recht groß werden kann. Wird dieser Konstruktor benutzt, wird der Standard-Java-Serializer benutzt. Dieser ist bei kleinen oder primitiven Datentypen ineffektiv und funktioniert bei nicht serialisierbaren Klassen nicht.- Parameters:
memoryCapacity
- Wie viel Speicher in Bytes maximal im Arbeitsspeicher gehalten werden sollen.filesystemCapacity
- Wie viel Speicher in Bytes maximal im Dateisystem gehalten werden sollen. Es handelt sich um einen Richtwert, der geringfügig (um maximal die Größe eines Elements) überschritten werden kann.
-
-
Method Details
-
iterator
Returns an iterator over the elements contained in this collection.It is imperative that the user manually synchronize on the returned collection when iterating over it:
Collection c = myFileBackedQueue; ... synchronized(c) { Iterator i = c.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }
Failure to follow this advice may result in non-deterministic behavior. -
size
public int size() -
offer
Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions. When using a capacity-restricted queue, this method is generally preferable toAbstractQueue.add(E)
, which can fail to insert an element only by throwing an exception.- Parameters:
e
- the element to add- Returns:
true
if the element was added to this queue, elsefalse
- Throws:
java.lang.ClassCastException
- if the class of the specified element prevents it from being added to this queuejava.lang.NullPointerException
- if the specified element is null and this queue does not permit null elementsjava.lang.IllegalArgumentException
- if some property of this element prevents it from being added to this queue
-
poll
Retrieves and removes the head of this queue, or returnsnull
if this queue is empty.- Returns:
- the head of this queue, or
null
if this queue is empty
-
peek
Retrieves, but does not remove, the head of this queue, or returnsnull
if this queue is empty.- Returns:
- the head of this queue, or
null
if this queue is empty
-
getMemoryUsed
public int getMemoryUsed()Gibt den Speicher zurück, den die Objekte im Arbeitsspeicher verwenden. Das ist nicht zwingend die Menge an Arbeitsspeicher, die wirklich verbraucht wird, sondern die Menge an Speicher, den die Objekte brauchen würden, wären sie in einer Datei serialisiert gespeichert. Dieser Wert kann kurzzeitig während des Einfügens von Objekten getMemoryCapacity() überschreiten.- Returns:
- Menge an Speicher in Bytes
-
getMemoryCapacity
public int getMemoryCapacity()Gibt die Kapazität des Caches in Bytes zurück, in dem die Objekte im Arbeitsspeicher gehalten werden. Das ist nicht zwingend die Menge an Arbeitsspeicher, die verbraucht wird, sondern die Menge an Speicher, den die Objekte brauchen würden, wären sie in einer Datei serialisiert gespeichert.- Returns:
- Kapazität in Bytes
-
getDiskUsed
public long getDiskUsed()Gibt den Festplattenplatz zurück, der von dieser Queue in Benutzung ist. Die Dateigröße kann aufgrund von Fragmentierung usw. größer sein.- Returns:
- Größe in Bytes
-
getDiskCapacity
public long getDiskCapacity()Gibt den maximal genutzen Festplattenplatz zurück, der von dieser Queue verwendet wird. Dieser Wert kann von getDiskUsed() um maximal eine Objektgröße überschritten werden.- Returns:
- Größe in Bytes
-
clear
public void clear()Removes all of the elements from this queue. The queue will be empty after this call returns. -
toString
public java.lang.String toString()- Overrides:
toString
in classjava.util.AbstractCollection<E>
-