Class 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 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.
    See Also:
    FileBackedLongQueue, FileBackedIntQueue, FileBackedShortQueue, FileBackedByteQueue, FileBackedStringQueue
    • 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

      All Methods Instance Methods Concrete Methods 
      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 returns null if this queue is empty.
      E poll()
      Retrieves and removes the head of this queue, or returns null 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 Detail

      • 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 Detail

      • iterator

        public java.util.Iterator<E> 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.
        Specified by:
        iterator in interface java.util.Collection<E>
        Specified by:
        iterator in interface java.lang.Iterable<E>
        Specified by:
        iterator in class java.util.AbstractCollection<E>
        Returns:
        an iterator over the elements contained in this collection
      • size

        public int size()
        Specified by:
        size in interface java.util.Collection<E>
        Specified by:
        size in class java.util.AbstractCollection<E>
      • offer

        public boolean offer​(E e)
        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 to AbstractQueue.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, else false
        Throws:
        java.lang.ClassCastException - if the class of the specified element prevents it from being added to this queue
        java.lang.NullPointerException - if the specified element is null and this queue does not permit null elements
        java.lang.IllegalArgumentException - if some property of this element prevents it from being added to this queue
      • poll

        public E poll()
        Retrieves and removes the head of this queue, or returns null if this queue is empty.
        Returns:
        the head of this queue, or null if this queue is empty
      • peek

        public E peek()
        Retrieves, but does not remove, the head of this queue, or returns null 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.
        Specified by:
        clear in interface java.util.Collection<E>
        Overrides:
        clear in class java.util.AbstractQueue<E>
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.util.AbstractCollection<E>