object ReplaySubject
Subject that buffers all items it observes and replays them to any Observer that subscribes.

val subject = ReplaySubject[String]() subject.onNext("one") subject.onNext("two") subject.onNext("three") subject.onCompleted() // both of the following will get the onNext/onCompleted calls from above subject.subscribe(observer1) subject.subscribe(observer2)
- Alphabetic
- By Inheritance
- ReplaySubject
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
apply[T](capacity: Int): ReplaySubject[T]
Creates an unbounded replay subject with the specified initial buffer capacity.
Creates an unbounded replay subject with the specified initial buffer capacity.
Use this method to avoid excessive array reallocation while the internal buffer grows to accomodate new items. For example, if you know that the buffer will hold 32k items, you can ask the
ReplaySubjectto preallocate its internal array with a capacity to hold that many items. Once the items start to arrive, the internal array won't need to grow, creating less garbage and no overhead due to frequent array-copying.- capacity
the initial buffer capacity
- returns
the created subject
-
def
apply[T](): ReplaySubject[T]
Creates an unbounded replay subject.
Creates an unbounded replay subject.
The internal buffer is backed by an
ArrayListand starts with an initial capacity of 16. Once the number of items reaches this capacity, it will grow as necessary (usually by 50%). However, as the number of items grows, this causes frequent array reallocation and copying, and may hurt performance and latency. This can be avoided with theapply(Int)overload which takes an initial capacity parameter and can be tuned to reduce the array reallocation frequency as needed.- returns
the created subject
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
withSize[T](size: Int): ReplaySubject[T]
Creates a size-bounded replay subject.
Creates a size-bounded replay subject.
In this setting, the
ReplaySubjectholds at mostsizeitems in its internal buffer and discards the oldest item.When observers subscribe to a terminated
ReplaySubject, they are guaranteed to see at mostsizeonNextevents followed by a termination event.If an observer subscribes while the
ReplaySubjectis active, it will observe all items in the buffer at that point in time and each item observed afterwards, even if the buffer evicts items due to the size constraint in the mean time. In other words, once an Observer subscribes, it will receive items without gaps in the sequence.- size
the maximum number of buffered items
- returns
the created subject
-
def
withTime[T](time: Duration, scheduler: Scheduler): ReplaySubject[T]
Creates a time-bounded replay subject.
Creates a time-bounded replay subject.
In this setting, the
ReplaySubjectinternally tags each observed item with a timestamp value supplied by theSchedulerand keeps only those whose age is less than the supplied time value converted to milliseconds. For example, an item arrives at T=0 and the max age is set to 5; at T>=5 this first item is then evicted by any subsequent item or termination event, leaving the buffer empty.Once the subject is terminated, observers subscribing to it will receive items that remained in the buffer after the terminal event, regardless of their age.
If an observer subscribes while the
ReplaySubjectis active, it will observe only those items from within the buffer that have an age less than the specified time, and each item observed thereafter, even if the buffer evicts items due to the time constraint in the mean time. In other words, once an observer subscribes, it observes items without gaps in the sequence except for any outdated items at the beginning of the sequence.Note that terminal notifications
onErrorandonCompletedtrigger eviction as well. For example, with a max age of 5, the first item is observed at T=0, then anonCompletednotification arrives at T=10. If an observer subscribes at T=11, it will find an emptyReplaySubjectwith just anonCompletednotification.- time
the maximum age of the contained items
- scheduler
the
Schedulerthat provides the current time- returns
the created subject
-
def
withTimeAndSize[T](time: Duration, size: Int, scheduler: Scheduler): ReplaySubject[T]
Creates a time- and size-bounded replay subject.
Creates a time- and size-bounded replay subject.
In this setting, the
ReplaySubjectinternally tags each received item with a timestamp value supplied by theSchedulerand holds at mostsizeitems in its internal buffer. It evicts items from the start of the buffer if their age becomes less-than or equal to the supplied age in milliseconds or the buffer reaches itssizelimit.When observers subscribe to a terminated
ReplaySubject, they observe the items that remained in the buffer after the terminal notification, regardless of their age, but at mostsizeitems.If an observer subscribes while the
ReplaySubjectis active, it will observe only those items from within the buffer that have age less than the specified time and each subsequent item, even if the buffer evicts items due to the time constraint in the mean time. In other words, once an observer subscribes, it observes items without gaps in the sequence except for the outdated items at the beginning of the sequence.Note that terminal notifications (
onErrorandonCompleted) trigger eviction as well. For example, with a max age of 5, the first item is observed at T=0, then anonCompletednotification arrives at T=10. If an observer subscribes at T=11, it will find an emptyReplaySubjectwith just anonCompletednotification.- time
the maximum age of the contained items
- size
the maximum number of buffered items
- scheduler
the
Schedulerthat provides the current time- returns
the created subject