+ /// A mark provides a guarantee that operations will be
+ /// valid over a "marked range" extending from the index where {@code mark()}
+ /// was called to the current . This allows the use of
+ /// streaming input sources by specifying the minimum buffering requirements
+ /// to support arbitrary lookahead during prediction.
+ ///
+ /// The returned mark is an opaque handle (type {@code int}) which is passed
+ /// to when the guarantees provided by the marked
+ /// range are no longer necessary. When calls to
+ /// {@code mark()}/{@code release()} are nested, the marks must be released
+ /// in reverse order of which they were obtained. Since marked regions are
+ /// used during performance-critical sections of prediction, the specific
+ /// behavior of invalid usage is unspecified (i.e. a mark is not released, or
+ /// a mark is released twice, or marks are not released in reverse order from
+ /// which they were created).
+ ///
+ /// The behavior of this method is unspecified if no call to an
+ /// has occurred after this stream was
+ /// constructed.
+ ///
+ /// This method does not change the current position in the input stream.
+ ///
+ /// The following example shows the use of ,
+ /// , , and
+ /// as part of an operation to safely work within a
+ /// marked region, then restore the stream position to its original value and
+ /// release the mark.
+ ///
+ /// IntStream stream = ...;
+ /// int index = -1;
+ /// int mark = stream.mark();
+ /// try {
+ /// index = stream.index();
+ /// // perform work here...
+ /// } finally {
+ /// if (index != -1) {
+ /// stream.seek(index);
+ /// }
+ /// stream.release(mark);
+ /// }
+ ///
+ ///
+ ///