<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_181-google-v7) on Wed Aug 14 17:37:14 PDT 2019 -->
<title>OffsetBasedSource.OffsetBasedReader (Apache Beam 2.15.0-SNAPSHOT)</title>
<meta name="date" content="2019-08-14">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="OffsetBasedSource.OffsetBasedReader (Apache Beam 2.15.0-SNAPSHOT)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":6,"i2":10,"i3":6,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/beam/sdk/io/Read.html" title="class in org.apache.beam.sdk.io"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" target="_top">Frames</a></li>
<li><a href="OffsetBasedSource.OffsetBasedReader.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.beam.sdk.io.BoundedSource.BoundedReader">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.beam.sdk.io</div>
<h2 title="Class OffsetBasedSource.OffsetBasedReader" class="title">Class OffsetBasedSource.OffsetBasedReader&lt;T&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html" title="class in org.apache.beam.sdk.io">org.apache.beam.sdk.io.Source.Reader</a>&lt;T&gt;</li>
<li>
<ul class="inheritance">
<li><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">org.apache.beam.sdk.io.BoundedSource.BoundedReader</a>&lt;T&gt;</li>
<li>
<ul class="inheritance">
<li>org.apache.beam.sdk.io.OffsetBasedSource.OffsetBasedReader&lt;T&gt;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd>java.lang.AutoCloseable</dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../../org/apache/beam/sdk/io/FileBasedSource.FileBasedReader.html" title="class in org.apache.beam.sdk.io">FileBasedSource.FileBasedReader</a></dd>
</dl>
<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="type parameter in OffsetBasedSource">T</a>&gt;</dd>
</dl>
<hr>
<br>
<pre>public abstract static class <span class="typeNameLabel">OffsetBasedSource.OffsetBasedReader&lt;T&gt;</span>
extends <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;T&gt;</pre>
<div class="block">A <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html" title="class in org.apache.beam.sdk.io"><code>Source.Reader</code></a> that implements code common to readers of all <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io"><code>OffsetBasedSource</code></a>s.

 <p>Subclasses have to implement:

 <ul>
   <li>The methods <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#startImpl--"><code>startImpl()</code></a> and <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advanceImpl--"><code>advanceImpl()</code></a> for reading the first or
       subsequent records.
   <li>The methods <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#getCurrent--"><code>Source.Reader.getCurrent()</code></a>, <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getCurrentOffset--"><code>getCurrentOffset()</code></a>, and optionally <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#isAtSplitPoint--"><code>isAtSplitPoint()</code></a> and <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentTimestamp--"><code>BoundedSource.BoundedReader.getCurrentTimestamp()</code></a> to access properties of the last record
       successfully read by <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#startImpl--"><code>startImpl()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advanceImpl--"><code>advanceImpl()</code></a>.
 </ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!--   -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.beam.sdk.io.BoundedSource.BoundedReader">
<!--   -->
</a>
<h3>Fields inherited from class&nbsp;org.apache.beam.sdk.io.<a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a></h3>
<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#SPLIT_POINTS_UNKNOWN">SPLIT_POINTS_UNKNOWN</a></code></li>
</ul>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#OffsetBasedReader-org.apache.beam.sdk.io.OffsetBasedSource-">OffsetBasedReader</a></span>(<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;&nbsp;source)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advance--">advance</a></span>()</code>
<div class="block">Advances the reader to the next valid record.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected abstract boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advanceImpl--">advanceImpl</a></span>()</code>
<div class="block">Advances to the next record and returns <code>true</code>, or returns false if there is no next
 record.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#allowsDynamicSplitting--">allowsDynamicSplitting</a></span>()</code>
<div class="block">Whether this reader should allow dynamic splitting of the offset ranges.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>protected abstract long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getCurrentOffset--">getCurrentOffset</a></span>()</code>
<div class="block">Returns the <i>starting</i> offset of the <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#getCurrent--"><code>current record</code></a>,
 which has been read by the last successful <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> call.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getCurrentSource--">getCurrentSource</a></span>()</code>
<div class="block">Returns a <code>Source</code> describing the same input that this <code>Reader</code> currently reads
 (including items already read).</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>java.lang.Double</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getFractionConsumed--">getFractionConsumed</a></span>()</code>
<div class="block">Returns a value in [0, 1] representing approximately what fraction of the <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>current source</code></a> this reader has read so far, or <code>null</code> if such an
 estimate is not available.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getSplitPointsConsumed--">getSplitPointsConsumed</a></span>()</code>
<div class="block">Returns the total amount of parallelism in the consumed (returned and processed) range of
 this reader's current <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource</code></a> (as would be returned by <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>BoundedSource.BoundedReader.getCurrentSource()</code></a>).</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getSplitPointsRemaining--">getSplitPointsRemaining</a></span>()</code>
<div class="block">Returns the total amount of parallelism in the unprocessed part of this reader's current
 <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource</code></a> (as would be returned by <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>BoundedSource.BoundedReader.getCurrentSource()</code></a>).</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#isAtSplitPoint--">isAtSplitPoint</a></span>()</code>
<div class="block">Returns whether the current record is at a split point (i.e., whether the current record
 would be the first record to be read by a source with a specified start offset of <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getCurrentOffset--"><code>getCurrentOffset()</code></a>).</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#isDone--">isDone</a></span>()</code>
<div class="block">Returns true if the last call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#start--"><code>start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advance--"><code>advance()</code></a> returned false.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#isStarted--">isStarted</a></span>()</code>
<div class="block">Returns true if there has been a call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#start--"><code>start()</code></a>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#splitAtFraction-double-">splitAtFraction</a></span>(double&nbsp;fraction)</code>
<div class="block">Tells the reader to narrow the range of the input it's going to read and give up the
 remainder, so that the new range would contain approximately the given fraction of the amount
 of data in the current range.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#start--">start</a></span>()</code>
<div class="block">Initializes the reader and advances the reader to the first record.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>protected abstract boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#startImpl--">startImpl</a></span>()</code>
<div class="block">Initializes the <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="class in org.apache.beam.sdk.io"><code>OffsetBasedSource.OffsetBasedReader</code></a> and advances to the first record,
 returning <code>true</code> if there is a record available to be read.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.beam.sdk.io.BoundedSource.BoundedReader">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.beam.sdk.io.<a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a></h3>
<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentTimestamp--">getCurrentTimestamp</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.beam.sdk.io.Source.Reader">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.beam.sdk.io.<a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html" title="class in org.apache.beam.sdk.io">Source.Reader</a></h3>
<code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#close--">close</a>, <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#getCurrent--">getCurrent</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="OffsetBasedReader-org.apache.beam.sdk.io.OffsetBasedSource-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>OffsetBasedReader</h4>
<pre>public&nbsp;OffsetBasedReader(<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;&nbsp;source)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>source</code> - the <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io"><code>OffsetBasedSource</code></a> to be read by the current reader.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="isDone--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isDone</h4>
<pre>public final&nbsp;boolean&nbsp;isDone()</pre>
<div class="block">Returns true if the last call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#start--"><code>start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#advance--"><code>advance()</code></a> returned false.</div>
</li>
</ul>
<a name="isStarted--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isStarted</h4>
<pre>public final&nbsp;boolean&nbsp;isStarted()</pre>
<div class="block">Returns true if there has been a call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#start--"><code>start()</code></a>.</div>
</li>
</ul>
<a name="getCurrentOffset--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentOffset</h4>
<pre>protected abstract&nbsp;long&nbsp;getCurrentOffset()
                                  throws java.util.NoSuchElementException</pre>
<div class="block">Returns the <i>starting</i> offset of the <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#getCurrent--"><code>current record</code></a>,
 which has been read by the last successful <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> call.

 <p>If no such call has been made yet, the return value is unspecified.

 <p>See <a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a> for description of offset semantics.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.util.NoSuchElementException</code></dd>
</dl>
</li>
</ul>
<a name="isAtSplitPoint--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isAtSplitPoint</h4>
<pre>protected&nbsp;boolean&nbsp;isAtSplitPoint()
                          throws java.util.NoSuchElementException</pre>
<div class="block">Returns whether the current record is at a split point (i.e., whether the current record
 would be the first record to be read by a source with a specified start offset of <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#getCurrentOffset--"><code>getCurrentOffset()</code></a>).

 <p>See detailed documentation about split points in <a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a>.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.util.NoSuchElementException</code></dd>
</dl>
</li>
</ul>
<a name="start--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
<pre>public final&nbsp;boolean&nbsp;start()
                    throws java.io.IOException</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--">Source.Reader</a></code></span></div>
<div class="block">Initializes the reader and advances the reader to the first record.

 <p>This method should be called exactly once. The invocation should occur prior to calling
 <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#getCurrent--"><code>Source.Reader.getCurrent()</code></a>. This method may perform expensive operations that
 are needed to initialize the reader.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--">start</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html" title="class in org.apache.beam.sdk.io">Source.Reader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if a record was read, <code>false</code> if there is no more input available.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="advance--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>advance</h4>
<pre>public final&nbsp;boolean&nbsp;advance()
                      throws java.io.IOException</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--">Source.Reader</a></code></span></div>
<div class="block">Advances the reader to the next valid record.

 <p>It is an error to call this without having called <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> first.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--">advance</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html" title="class in org.apache.beam.sdk.io">Source.Reader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if a record was read, <code>false</code> if there is no more input available.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
</dl>
</li>
</ul>
<a name="startImpl--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>startImpl</h4>
<pre>protected abstract&nbsp;boolean&nbsp;startImpl()
                              throws java.io.IOException</pre>
<div class="block">Initializes the <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="class in org.apache.beam.sdk.io"><code>OffsetBasedSource.OffsetBasedReader</code></a> and advances to the first record,
 returning <code>true</code> if there is a record available to be read. This method will be invoked
 exactly once and may perform expensive setup operations that are needed to initialize the
 reader.

 <p>This function is the <code>OffsetBasedReader</code> implementation of <code>BoundedReader#start</code>. The key difference is that the implementor can ignore the possibility
 that it should no longer produce the first record, either because it has exceeded the
 original <code>endOffset</code> assigned to the reader, or because a concurrent call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#splitAtFraction-double-"><code>splitAtFraction(double)</code></a> has changed the source to shrink the offset range being read.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><code>BoundedReader#start</code></dd>
</dl>
</li>
</ul>
<a name="advanceImpl--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>advanceImpl</h4>
<pre>protected abstract&nbsp;boolean&nbsp;advanceImpl()
                                throws java.io.IOException</pre>
<div class="block">Advances to the next record and returns <code>true</code>, or returns false if there is no next
 record.

 <p>This function is the <code>OffsetBasedReader</code> implementation of <code>BoundedReader#advance</code>. The key difference is that the implementor can ignore the possibility
 that it should no longer produce the next record, either because it has exceeded the original
 <code>endOffset</code> assigned to the reader, or because a concurrent call to <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#splitAtFraction-double-"><code>splitAtFraction(double)</code></a> has changed the source to shrink the offset range being read.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><code>BoundedReader#advance</code></dd>
</dl>
</li>
</ul>
<a name="getCurrentSource--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentSource</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;&nbsp;getCurrentSource()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--">BoundedSource.BoundedReader</a></code></span></div>
<div class="block">Returns a <code>Source</code> describing the same input that this <code>Reader</code> currently reads
 (including items already read).

 <h3>Usage</h3>

 <p>Reader subclasses can use this method for convenience to access unchanging properties of
 the source being read. Alternatively, they can cache these properties in the constructor.

 <p>The framework will call this method in the course of dynamic work rebalancing, e.g. after
 a successful <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#splitAtFraction-double-"><code>BoundedSource.BoundedReader.splitAtFraction(double)</code></a> call.

 <h3>Mutability and thread safety</h3>

 <p>Remember that <a href="../../../../../org/apache/beam/sdk/io/Source.html" title="class in org.apache.beam.sdk.io"><code>Source</code></a> objects must always be immutable. However, the return value
 of this function may be affected by dynamic work rebalancing, happening asynchronously via
 <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#splitAtFraction-double-"><code>BoundedSource.BoundedReader.splitAtFraction(double)</code></a>, meaning it can return a different <a href="../../../../../org/apache/beam/sdk/io/Source.html" title="class in org.apache.beam.sdk.io"><code>Source</code></a> object. However, the returned object itself will still itself be immutable. Callers
 must take care not to rely on properties of the returned source that may be asynchronously
 changed as a result of this process (e.g. do not cache an end offset when reading a file).

 <h3>Implementation</h3>

 <p>For convenience, subclasses should usually return the most concrete subclass of <a href="../../../../../org/apache/beam/sdk/io/Source.html" title="class in org.apache.beam.sdk.io"><code>Source</code></a> possible. In practice, the implementation of this method should nearly always be one
 of the following:

 <ul>
   <li>Source that inherits from a base class that already implements <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>BoundedSource.BoundedReader.getCurrentSource()</code></a>: delegate to base class. In this case, it is almost always an error
       for the subclass to maintain its own copy of the source.
       <pre><code>
 public FooReader(FooSource&lt;T&gt; source) {
   super(source);
 }

 public FooSource&lt;T&gt; getCurrentSource() {
   return (FooSource&lt;T&gt;)super.getCurrentSource();
 }
 </code></pre>
   <li>Source that does not support dynamic work rebalancing: return a private final variable.
       <pre><code>
 private final FooSource&lt;T&gt; source;

 public FooReader(FooSource&lt;T&gt; source) {
   this.source = source;
 }

 public FooSource&lt;T&gt; getCurrentSource() {
   return source;
 }
 </code></pre>
   <li><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource.BoundedReader</code></a> that explicitly supports dynamic work rebalancing:
       maintain a variable pointing to an immutable source object, and protect it with
       synchronization.
       <pre><code>
 private FooSource&lt;T&gt; source;

 public FooReader(FooSource&lt;T&gt; source) {
   this.source = source;
 }

 public synchronized FooSource&lt;T&gt; getCurrentSource() {
   return source;
 }

 public synchronized FooSource&lt;T&gt; splitAtFraction(double fraction) {
   ...
   FooSource&lt;T&gt; primary = ...;
   FooSource&lt;T&gt; residual = ...;
   this.source = primary;
   return residual;
 }
 </code></pre>
 </ul></div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--">getCurrentSource</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
</dl>
</li>
</ul>
<a name="getFractionConsumed--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getFractionConsumed</h4>
<pre>public&nbsp;java.lang.Double&nbsp;getFractionConsumed()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getFractionConsumed--">BoundedSource.BoundedReader</a></code></span></div>
<div class="block">Returns a value in [0, 1] representing approximately what fraction of the <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>current source</code></a> this reader has read so far, or <code>null</code> if such an
 estimate is not available.

 <p>It is recommended that this method should satisfy the following properties:

 <ul>
   <li>Should return 0 before the <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> call.
   <li>Should return 1 after a <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> call that returns false.
   <li>The returned values should be non-decreasing (though they don't have to be unique).
 </ul>

 <p>By default, returns null to indicate that this cannot be estimated.

 <h3>Thread safety</h3>

 If <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#splitAtFraction-double-"><code>BoundedSource.BoundedReader.splitAtFraction(double)</code></a> is implemented, this method can be called concurrently to other
 methods (including itself), and it is therefore critical for it to be implemented in a
 thread-safe way.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getFractionConsumed--">getFractionConsumed</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
</dl>
</li>
</ul>
<a name="getSplitPointsConsumed--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSplitPointsConsumed</h4>
<pre>public&nbsp;long&nbsp;getSplitPointsConsumed()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsConsumed--">BoundedSource.BoundedReader</a></code></span></div>
<div class="block">Returns the total amount of parallelism in the consumed (returned and processed) range of
 this reader's current <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource</code></a> (as would be returned by <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>BoundedSource.BoundedReader.getCurrentSource()</code></a>). This corresponds to all split point records (see <a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a>)
 returned by this reader, <em>excluding</em> the last split point returned if the reader is
 not finished.

 <p>Consider the following examples: (1) An input that can be read in parallel down to the
 individual records, such as <a href="../../../../../org/apache/beam/sdk/io/CountingSource.html#upTo-long-"><code>CountingSource.upTo(long)</code></a>, is called "perfectly splittable".
 (2) a "block-compressed" file format such as <a href="../../../../../org/apache/beam/sdk/io/AvroIO.html" title="class in org.apache.beam.sdk.io"><code>AvroIO</code></a>, in which a block of records has
 to be read as a whole, but different blocks can be read in parallel. (3) An "unsplittable"
 input such as a cursor in a database.

 <ul>
   <li>Any <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>reader</code></a> that is unstarted (aka, has never had a call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a>) has a consumed parallelism of 0. This condition holds independent of whether
       the input is splittable.
   <li>Any <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>reader</code></a> that has only returned its first element (aka, has
       never had a call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a>) has a consumed parallelism of 0: the first
       element is the current element and is still being processed. This condition holds
       independent of whether the input is splittable.
   <li>For an empty reader (in which the call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> returned false), the consumed
       parallelism is 0. This condition holds independent of whether the input is splittable.
   <li>For a non-empty, finished reader (in which the call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> returned true and
       a call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> has returned false), the value returned must be at least 1
       and should equal the total parallelism in the source.
   <li>For example (1): After returning record #30 (starting at 1) out of 50 in a perfectly
       splittable 50-record input, this value should be 29. When finished, the consumed
       parallelism should be 50.
   <li>For example (2): In a block-compressed value consisting of 5 blocks, the value should
       stay at 0 until the first record of the second block is returned; stay at 1 until the
       first record of the third block is returned, etc. Only once the end-of-file is reached
       then the fifth block has been consumed and the value should stay at 5.
   <li>For example (3): For any non-empty unsplittable input, the consumed parallelism is 0
       until the reader is finished (because the last call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> returned false,
       at which point it becomes 1.
 </ul>

 <p>A reader that is implemented using a <a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a> is encouraged to use the range
 tracker's ability to count split points to implement this method. See <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="class in org.apache.beam.sdk.io"><code>OffsetBasedSource.OffsetBasedReader</code></a> and <a href="../../../../../org/apache/beam/sdk/io/range/OffsetRangeTracker.html" title="class in org.apache.beam.sdk.io.range"><code>OffsetRangeTracker</code></a> for an example.

 <p>Defaults to <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#SPLIT_POINTS_UNKNOWN"><code>BoundedSource.BoundedReader.SPLIT_POINTS_UNKNOWN</code></a>. Any value less than 0 will be interpreted as
 unknown.

 <h3>Thread safety</h3>

 See the javadoc on <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource.BoundedReader</code></a> for information about thread safety.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsConsumed--">getSplitPointsConsumed</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsRemaining--"><code>BoundedSource.BoundedReader.getSplitPointsRemaining()</code></a></dd>
</dl>
</li>
</ul>
<a name="getSplitPointsRemaining--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSplitPointsRemaining</h4>
<pre>public&nbsp;long&nbsp;getSplitPointsRemaining()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsRemaining--">BoundedSource.BoundedReader</a></code></span></div>
<div class="block">Returns the total amount of parallelism in the unprocessed part of this reader's current
 <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource</code></a> (as would be returned by <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getCurrentSource--"><code>BoundedSource.BoundedReader.getCurrentSource()</code></a>). This corresponds
 to all unprocessed split point records (see <a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a>), including the last split
 point returned, in the remainder part of the source.

 <p>This function should be implemented only <strong>in addition to <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsConsumed--"><code>BoundedSource.BoundedReader.getSplitPointsConsumed()</code></a></strong> and only if <em>an exact value can be returned</em>.

 <p>Consider the following examples: (1) An input that can be read in parallel down to the
 individual records, such as <a href="../../../../../org/apache/beam/sdk/io/CountingSource.html#upTo-long-"><code>CountingSource.upTo(long)</code></a>, is called "perfectly splittable".
 (2) a "block-compressed" file format such as <a href="../../../../../org/apache/beam/sdk/io/AvroIO.html" title="class in org.apache.beam.sdk.io"><code>AvroIO</code></a>, in which a block of records has
 to be read as a whole, but different blocks can be read in parallel. (3) An "unsplittable"
 input such as a cursor in a database.

 <p>Assume for examples (1) and (2) that the number of records or blocks remaining is known:

 <ul>
   <li>Any <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>reader</code></a> for which the last call to <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> has returned true should should not return 0, because this reader itself
       represents parallelism at least 1. This condition holds independent of whether the
       input is splittable.
   <li>A finished reader (for which <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a> or <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a>) has returned false
       should return a value of 0. This condition holds independent of whether the input is
       splittable.
   <li>For example 1: After returning record #30 (starting at 1) out of 50 in a perfectly
       splittable 50-record input, this value should be 21 (20 remaining + 1 current) if the
       total number of records is known.
   <li>For example 2: After returning a record in block 3 in a block-compressed file
       consisting of 5 blocks, this value should be 3 (since blocks 4 and 5 can be processed
       in parallel by new readers produced via dynamic work rebalancing, while the current
       reader continues processing block 3) if the total number of blocks is known.
   <li>For example (3): a reader for any non-empty unsplittable input, should return 1 until
       it is finished, at which point it should return 0.
   <li>For any reader: After returning the last split point in a file (e.g., the last record
       in example (1), the first record in the last block for example (2), or the first record
       in the file for example (3), this value should be 1: apart from the current task, no
       additional remainder can be split off.
 </ul>

 <p>Defaults to <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#SPLIT_POINTS_UNKNOWN"><code>BoundedSource.BoundedReader.SPLIT_POINTS_UNKNOWN</code></a>. Any value less than 0 will be interpreted as
 unknown.

 <h3>Thread safety</h3>

 See the javadoc on <a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io"><code>BoundedSource.BoundedReader</code></a> for information about thread safety.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsRemaining--">getSplitPointsRemaining</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#getSplitPointsConsumed--"><code>BoundedSource.BoundedReader.getSplitPointsConsumed()</code></a></dd>
</dl>
</li>
</ul>
<a name="allowsDynamicSplitting--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>allowsDynamicSplitting</h4>
<pre>public&nbsp;boolean&nbsp;allowsDynamicSplitting()</pre>
<div class="block">Whether this reader should allow dynamic splitting of the offset ranges.

 <p>True by default. Override this to return false if the reader cannot support dynamic
 splitting correctly. If this returns false, <a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html#splitAtFraction-double-"><code>splitAtFraction(double)</code></a> will
 refuse all split requests.</div>
</li>
</ul>
<a name="splitAtFraction-double-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>splitAtFraction</h4>
<pre>public final&nbsp;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io">OffsetBasedSource</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;&nbsp;splitAtFraction(double&nbsp;fraction)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#splitAtFraction-double-">BoundedSource.BoundedReader</a></code></span></div>
<div class="block">Tells the reader to narrow the range of the input it's going to read and give up the
 remainder, so that the new range would contain approximately the given fraction of the amount
 of data in the current range.

 <p>Returns a <code>BoundedSource</code> representing the remainder.

 <h3>Detailed description</h3>

 Assuming the following sequence of calls:

 <pre><code>
 BoundedSource&lt;T&gt; initial = reader.getCurrentSource();
 BoundedSource&lt;T&gt; residual = reader.splitAtFraction(fraction);
 BoundedSource&lt;T&gt; primary = reader.getCurrentSource();
 </code></pre>

 <ul>
   <li>The "primary" and "residual" sources, when read, should together cover the same set of
       records as "initial".
   <li>The current reader should continue to be in a valid state, and continuing to read from
       it should, together with the records it already read, yield the same records as would
       have been read by "primary".
   <li>The amount of data read by "primary" should ideally represent approximately the given
       fraction of the amount of data read by "initial".
 </ul>

 For example, a reader that reads a range of offsets <i>[A, B)</i> in a file might implement
 this method by truncating the current range to <i>[A, A + fraction*(B-A))</i> and returning a
 Source representing the range <i>[A + fraction*(B-A), B)</i>.

 <p>This method should return <code>null</code> if the split cannot be performed for this fraction
 while satisfying the semantics above. E.g., a reader that reads a range of offsets in a file
 should return <code>null</code> if it is already past the position in its range corresponding to
 the given fraction. In this case, the method MUST have no effect (the reader must behave as
 if the method hadn't been called at all).

 <h3>Statefulness</h3>

 Since this method (if successful) affects the reader's source, in subsequent invocations
 "fraction" should be interpreted relative to the new current source.

 <h3>Thread safety and blocking</h3>

 This method will be called concurrently to other methods (however there will not be multiple
 concurrent invocations of this method itself), and it is critical for it to be implemented in
 a thread-safe way (otherwise data loss is possible).

 <p>It is also very important that this method always completes quickly. In particular, it
 should not perform or wait on any blocking operations such as I/O, RPCs etc. Violating this
 requirement may stall completion of the work item or even cause it to fail.

 <p>It is incorrect to make both this method and <a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#start--"><code>Source.Reader.start()</code></a>/<a href="../../../../../org/apache/beam/sdk/io/Source.Reader.html#advance--"><code>Source.Reader.advance()</code></a> <code>synchronized</code>, because those methods can perform blocking operations, and then this method
 would have to wait for those calls to complete.

 <p><a href="../../../../../org/apache/beam/sdk/io/range/RangeTracker.html" title="interface in org.apache.beam.sdk.io.range"><code>RangeTracker</code></a> makes it easy to implement this method
 safely and correctly.

 <p>By default, returns null to indicate that splitting is not possible.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html#splitAtFraction-double-">splitAtFraction</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/beam/sdk/io/BoundedSource.BoundedReader.html" title="class in org.apache.beam.sdk.io">BoundedSource.BoundedReader</a>&lt;<a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" title="type parameter in OffsetBasedSource.OffsetBasedReader">T</a>&gt;</code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/beam/sdk/io/OffsetBasedSource.html" title="class in org.apache.beam.sdk.io"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/beam/sdk/io/Read.html" title="class in org.apache.beam.sdk.io"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/beam/sdk/io/OffsetBasedSource.OffsetBasedReader.html" target="_top">Frames</a></li>
<li><a href="OffsetBasedSource.OffsetBasedReader.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.org.apache.beam.sdk.io.BoundedSource.BoundedReader">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
