<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.core.buffer;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.EOFException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.InputStream;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.io.ObjectInputStream;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.ObjectOutputStream;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.ObjectStreamClass;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.io.OutputStream;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.io.Serializable;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.io.StreamCorruptedException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.nio.BufferOverflowException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.nio.BufferUnderflowException;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.nio.ByteBuffer;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.nio.ByteOrder;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.nio.CharBuffer;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.nio.DoubleBuffer;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.nio.FloatBuffer;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.nio.IntBuffer;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.nio.LongBuffer;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.nio.ShortBuffer;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.nio.charset.CharacterCodingException;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.nio.charset.CharsetDecoder;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.nio.charset.CharsetEncoder;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.nio.charset.CoderResult;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.EnumSet;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.Set;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>/**<a name="line.48"></a>
<span class="sourceLineNo">049</span> * A base implementation of {@link IoBuffer}.  This implementation<a name="line.49"></a>
<span class="sourceLineNo">050</span> * assumes that {@link IoBuffer#buf()} always returns a correct NIO<a name="line.50"></a>
<span class="sourceLineNo">051</span> * {@link ByteBuffer} instance.  Most implementations could<a name="line.51"></a>
<span class="sourceLineNo">052</span> * extend this class and implement their own buffer management mechanism.<a name="line.52"></a>
<span class="sourceLineNo">053</span> *<a name="line.53"></a>
<span class="sourceLineNo">054</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span> * @see IoBufferAllocator<a name="line.55"></a>
<span class="sourceLineNo">056</span> */<a name="line.56"></a>
<span class="sourceLineNo">057</span>public abstract class AbstractIoBuffer extends IoBuffer {<a name="line.57"></a>
<span class="sourceLineNo">058</span>    /** Tells if a buffer has been created from an existing buffer */<a name="line.58"></a>
<span class="sourceLineNo">059</span>    private final boolean derived;<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>    /** A flag set to true if the buffer can extend automatically */<a name="line.61"></a>
<span class="sourceLineNo">062</span>    private boolean autoExpand;<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>    /** A flag set to true if the buffer can shrink automatically */<a name="line.64"></a>
<span class="sourceLineNo">065</span>    private boolean autoShrink;<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span>    /** Tells if a buffer can be expanded */<a name="line.67"></a>
<span class="sourceLineNo">068</span>    private boolean recapacityAllowed = true;<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>    /** The minimum number of bytes the IoBuffer can hold */<a name="line.70"></a>
<span class="sourceLineNo">071</span>    private int minimumCapacity;<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>    /** A mask for a byte */<a name="line.73"></a>
<span class="sourceLineNo">074</span>    private static final long BYTE_MASK = 0xFFL;<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>    /** A mask for a short */<a name="line.76"></a>
<span class="sourceLineNo">077</span>    private static final long SHORT_MASK = 0xFFFFL;<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    /** A mask for an int */<a name="line.79"></a>
<span class="sourceLineNo">080</span>    private static final long INT_MASK = 0xFFFFFFFFL;<a name="line.80"></a>
<span class="sourceLineNo">081</span><a name="line.81"></a>
<span class="sourceLineNo">082</span>    /**<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * We don't have any access to Buffer.markValue(), so we need to track it down,<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * which will cause small extra overhead.<a name="line.84"></a>
<span class="sourceLineNo">085</span>     */<a name="line.85"></a>
<span class="sourceLineNo">086</span>    private int mark = -1;<a name="line.86"></a>
<span class="sourceLineNo">087</span><a name="line.87"></a>
<span class="sourceLineNo">088</span>    /**<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * Creates a new parent buffer.<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * <a name="line.90"></a>
<span class="sourceLineNo">091</span>     * @param allocator The allocator to use to create new buffers<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * @param initialCapacity The initial buffer capacity when created<a name="line.92"></a>
<span class="sourceLineNo">093</span>     */<a name="line.93"></a>
<span class="sourceLineNo">094</span>    protected AbstractIoBuffer(IoBufferAllocator allocator, int initialCapacity) {<a name="line.94"></a>
<span class="sourceLineNo">095</span>        setAllocator(allocator);<a name="line.95"></a>
<span class="sourceLineNo">096</span>        this.recapacityAllowed = true;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        this.derived = false;<a name="line.97"></a>
<span class="sourceLineNo">098</span>        this.minimumCapacity = initialCapacity;<a name="line.98"></a>
<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>    /**<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * Creates a new derived buffer. A derived buffer uses an existing<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * buffer properties - the allocator and capacity -.<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * <a name="line.104"></a>
<span class="sourceLineNo">105</span>     * @param parent The buffer we get the properties from<a name="line.105"></a>
<span class="sourceLineNo">106</span>     */<a name="line.106"></a>
<span class="sourceLineNo">107</span>    protected AbstractIoBuffer(AbstractIoBuffer parent) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>        setAllocator(IoBuffer.getAllocator());<a name="line.108"></a>
<span class="sourceLineNo">109</span>        this.recapacityAllowed = false;<a name="line.109"></a>
<span class="sourceLineNo">110</span>        this.derived = true;<a name="line.110"></a>
<span class="sourceLineNo">111</span>        this.minimumCapacity = parent.minimumCapacity;<a name="line.111"></a>
<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>    /**<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * {@inheritDoc}<a name="line.115"></a>
<span class="sourceLineNo">116</span>     */<a name="line.116"></a>
<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
<span class="sourceLineNo">118</span>    public final boolean isDirect() {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        return buf().isDirect();<a name="line.119"></a>
<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * {@inheritDoc}<a name="line.123"></a>
<span class="sourceLineNo">124</span>     */<a name="line.124"></a>
<span class="sourceLineNo">125</span>    @Override<a name="line.125"></a>
<span class="sourceLineNo">126</span>    public final boolean isReadOnly() {<a name="line.126"></a>
<span class="sourceLineNo">127</span>        return buf().isReadOnly();<a name="line.127"></a>
<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>    /**<a name="line.130"></a>
<span class="sourceLineNo">131</span>     * Sets the underlying NIO buffer instance.<a name="line.131"></a>
<span class="sourceLineNo">132</span>     * <a name="line.132"></a>
<span class="sourceLineNo">133</span>     * @param newBuf The buffer to store within this IoBuffer<a name="line.133"></a>
<span class="sourceLineNo">134</span>     */<a name="line.134"></a>
<span class="sourceLineNo">135</span>    protected abstract void buf(ByteBuffer newBuf);<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>    /**<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * {@inheritDoc}<a name="line.138"></a>
<span class="sourceLineNo">139</span>     */<a name="line.139"></a>
<span class="sourceLineNo">140</span>    @Override<a name="line.140"></a>
<span class="sourceLineNo">141</span>    public final int minimumCapacity() {<a name="line.141"></a>
<span class="sourceLineNo">142</span>        return minimumCapacity;<a name="line.142"></a>
<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    /**<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * {@inheritDoc}<a name="line.146"></a>
<span class="sourceLineNo">147</span>     */<a name="line.147"></a>
<span class="sourceLineNo">148</span>    @Override<a name="line.148"></a>
<span class="sourceLineNo">149</span>    public final IoBuffer minimumCapacity(int minimumCapacity) {<a name="line.149"></a>
<span class="sourceLineNo">150</span>        if (minimumCapacity &lt; 0) {<a name="line.150"></a>
<span class="sourceLineNo">151</span>            throw new IllegalArgumentException("minimumCapacity: " + minimumCapacity);<a name="line.151"></a>
<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
<span class="sourceLineNo">153</span>        this.minimumCapacity = minimumCapacity;<a name="line.153"></a>
<span class="sourceLineNo">154</span>        return this;<a name="line.154"></a>
<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    /**<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * {@inheritDoc}<a name="line.158"></a>
<span class="sourceLineNo">159</span>     */<a name="line.159"></a>
<span class="sourceLineNo">160</span>    @Override<a name="line.160"></a>
<span class="sourceLineNo">161</span>    public final int capacity() {<a name="line.161"></a>
<span class="sourceLineNo">162</span>        return buf().capacity();<a name="line.162"></a>
<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>    /**<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * {@inheritDoc}<a name="line.166"></a>
<span class="sourceLineNo">167</span>     */<a name="line.167"></a>
<span class="sourceLineNo">168</span>    @Override<a name="line.168"></a>
<span class="sourceLineNo">169</span>    public final IoBuffer capacity(int newCapacity) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>        if (!recapacityAllowed) {<a name="line.170"></a>
<span class="sourceLineNo">171</span>            throw new IllegalStateException("Derived buffers and their parent can't be expanded.");<a name="line.171"></a>
<span class="sourceLineNo">172</span>        }<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span>        // Allocate a new buffer and transfer all settings to it.<a name="line.174"></a>
<span class="sourceLineNo">175</span>        if (newCapacity &gt; capacity()) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>            // Expand:<a name="line.176"></a>
<span class="sourceLineNo">177</span>            //// Save the state.<a name="line.177"></a>
<span class="sourceLineNo">178</span>            int pos = position();<a name="line.178"></a>
<span class="sourceLineNo">179</span>            int limit = limit();<a name="line.179"></a>
<span class="sourceLineNo">180</span>            ByteOrder bo = order();<a name="line.180"></a>
<span class="sourceLineNo">181</span><a name="line.181"></a>
<span class="sourceLineNo">182</span>            //// Reallocate.<a name="line.182"></a>
<span class="sourceLineNo">183</span>            ByteBuffer oldBuf = buf();<a name="line.183"></a>
<span class="sourceLineNo">184</span>            ByteBuffer newBuf = getAllocator().allocateNioBuffer(newCapacity, isDirect());<a name="line.184"></a>
<span class="sourceLineNo">185</span>            oldBuf.clear();<a name="line.185"></a>
<span class="sourceLineNo">186</span>            newBuf.put(oldBuf);<a name="line.186"></a>
<span class="sourceLineNo">187</span>            buf(newBuf);<a name="line.187"></a>
<span class="sourceLineNo">188</span><a name="line.188"></a>
<span class="sourceLineNo">189</span>            //// Restore the state.<a name="line.189"></a>
<span class="sourceLineNo">190</span>            buf().limit(limit);<a name="line.190"></a>
<span class="sourceLineNo">191</span>            if (mark &gt;= 0) {<a name="line.191"></a>
<span class="sourceLineNo">192</span>                buf().position(mark);<a name="line.192"></a>
<span class="sourceLineNo">193</span>                buf().mark();<a name="line.193"></a>
<span class="sourceLineNo">194</span>            }<a name="line.194"></a>
<span class="sourceLineNo">195</span>            buf().position(pos);<a name="line.195"></a>
<span class="sourceLineNo">196</span>            buf().order(bo);<a name="line.196"></a>
<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>        return this;<a name="line.199"></a>
<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
<span class="sourceLineNo">201</span><a name="line.201"></a>
<span class="sourceLineNo">202</span>    /**<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * {@inheritDoc}<a name="line.203"></a>
<span class="sourceLineNo">204</span>     */<a name="line.204"></a>
<span class="sourceLineNo">205</span>    @Override<a name="line.205"></a>
<span class="sourceLineNo">206</span>    public final boolean isAutoExpand() {<a name="line.206"></a>
<span class="sourceLineNo">207</span>        return autoExpand &amp;&amp; recapacityAllowed;<a name="line.207"></a>
<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>    /**<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * {@inheritDoc}<a name="line.211"></a>
<span class="sourceLineNo">212</span>     */<a name="line.212"></a>
<span class="sourceLineNo">213</span>    @Override<a name="line.213"></a>
<span class="sourceLineNo">214</span>    public final boolean isAutoShrink() {<a name="line.214"></a>
<span class="sourceLineNo">215</span>        return autoShrink &amp;&amp; recapacityAllowed;<a name="line.215"></a>
<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
<span class="sourceLineNo">217</span><a name="line.217"></a>
<span class="sourceLineNo">218</span>    /**<a name="line.218"></a>
<span class="sourceLineNo">219</span>     * {@inheritDoc}<a name="line.219"></a>
<span class="sourceLineNo">220</span>     */<a name="line.220"></a>
<span class="sourceLineNo">221</span>    @Override<a name="line.221"></a>
<span class="sourceLineNo">222</span>    public final boolean isDerived() {<a name="line.222"></a>
<span class="sourceLineNo">223</span>        return derived;<a name="line.223"></a>
<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
<span class="sourceLineNo">225</span><a name="line.225"></a>
<span class="sourceLineNo">226</span>    /**<a name="line.226"></a>
<span class="sourceLineNo">227</span>     * {@inheritDoc}<a name="line.227"></a>
<span class="sourceLineNo">228</span>     */<a name="line.228"></a>
<span class="sourceLineNo">229</span>    @Override<a name="line.229"></a>
<span class="sourceLineNo">230</span>    public final IoBuffer setAutoExpand(boolean autoExpand) {<a name="line.230"></a>
<span class="sourceLineNo">231</span>        if (!recapacityAllowed) {<a name="line.231"></a>
<span class="sourceLineNo">232</span>            throw new IllegalStateException("Derived buffers and their parent can't be expanded.");<a name="line.232"></a>
<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
<span class="sourceLineNo">234</span>        this.autoExpand = autoExpand;<a name="line.234"></a>
<span class="sourceLineNo">235</span>        return this;<a name="line.235"></a>
<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
<span class="sourceLineNo">237</span><a name="line.237"></a>
<span class="sourceLineNo">238</span>    /**<a name="line.238"></a>
<span class="sourceLineNo">239</span>     * {@inheritDoc}<a name="line.239"></a>
<span class="sourceLineNo">240</span>     */<a name="line.240"></a>
<span class="sourceLineNo">241</span>    @Override<a name="line.241"></a>
<span class="sourceLineNo">242</span>    public final IoBuffer setAutoShrink(boolean autoShrink) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>        if (!recapacityAllowed) {<a name="line.243"></a>
<span class="sourceLineNo">244</span>            throw new IllegalStateException("Derived buffers and their parent can't be shrinked.");<a name="line.244"></a>
<span class="sourceLineNo">245</span>        }<a name="line.245"></a>
<span class="sourceLineNo">246</span>        this.autoShrink = autoShrink;<a name="line.246"></a>
<span class="sourceLineNo">247</span>        return this;<a name="line.247"></a>
<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>    /**<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * {@inheritDoc}<a name="line.251"></a>
<span class="sourceLineNo">252</span>     */<a name="line.252"></a>
<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
<span class="sourceLineNo">254</span>    public final IoBuffer expand(int expectedRemaining) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>        return expand(position(), expectedRemaining, false);<a name="line.255"></a>
<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>    private IoBuffer expand(int expectedRemaining, boolean autoExpand) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>        return expand(position(), expectedRemaining, autoExpand);<a name="line.259"></a>
<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>    /**<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * {@inheritDoc}<a name="line.263"></a>
<span class="sourceLineNo">264</span>     */<a name="line.264"></a>
<span class="sourceLineNo">265</span>    @Override<a name="line.265"></a>
<span class="sourceLineNo">266</span>    public final IoBuffer expand(int pos, int expectedRemaining) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>        return expand(pos, expectedRemaining, false);<a name="line.267"></a>
<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>    private IoBuffer expand(int pos, int expectedRemaining, boolean autoExpand) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>        if (!recapacityAllowed) {<a name="line.271"></a>
<span class="sourceLineNo">272</span>            throw new IllegalStateException("Derived buffers and their parent can't be expanded.");<a name="line.272"></a>
<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>        int end = pos + expectedRemaining;<a name="line.275"></a>
<span class="sourceLineNo">276</span>        int newCapacity;<a name="line.276"></a>
<span class="sourceLineNo">277</span>        <a name="line.277"></a>
<span class="sourceLineNo">278</span>        if (autoExpand) {<a name="line.278"></a>
<span class="sourceLineNo">279</span>            newCapacity = IoBuffer.normalizeCapacity(end);<a name="line.279"></a>
<span class="sourceLineNo">280</span>        } else {<a name="line.280"></a>
<span class="sourceLineNo">281</span>            newCapacity = end;<a name="line.281"></a>
<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
<span class="sourceLineNo">283</span>        if (newCapacity &gt; capacity()) {<a name="line.283"></a>
<span class="sourceLineNo">284</span>            // The buffer needs expansion.<a name="line.284"></a>
<span class="sourceLineNo">285</span>            capacity(newCapacity);<a name="line.285"></a>
<span class="sourceLineNo">286</span>        }<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>        if (end &gt; limit()) {<a name="line.288"></a>
<span class="sourceLineNo">289</span>            // We call limit() directly to prevent StackOverflowError<a name="line.289"></a>
<span class="sourceLineNo">290</span>            buf().limit(end);<a name="line.290"></a>
<span class="sourceLineNo">291</span>        }<a name="line.291"></a>
<span class="sourceLineNo">292</span>        return this;<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
<span class="sourceLineNo">296</span>     * {@inheritDoc}<a name="line.296"></a>
<span class="sourceLineNo">297</span>     */<a name="line.297"></a>
<span class="sourceLineNo">298</span>    @Override<a name="line.298"></a>
<span class="sourceLineNo">299</span>    public final IoBuffer shrink() {<a name="line.299"></a>
<span class="sourceLineNo">300</span><a name="line.300"></a>
<span class="sourceLineNo">301</span>        if (!recapacityAllowed) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>            throw new IllegalStateException("Derived buffers and their parent can't be expanded.");<a name="line.302"></a>
<span class="sourceLineNo">303</span>        }<a name="line.303"></a>
<span class="sourceLineNo">304</span><a name="line.304"></a>
<span class="sourceLineNo">305</span>        int position = position();<a name="line.305"></a>
<span class="sourceLineNo">306</span>        int capacity = capacity();<a name="line.306"></a>
<span class="sourceLineNo">307</span>        int limit = limit();<a name="line.307"></a>
<span class="sourceLineNo">308</span><a name="line.308"></a>
<span class="sourceLineNo">309</span>        if (capacity == limit) {<a name="line.309"></a>
<span class="sourceLineNo">310</span>            return this;<a name="line.310"></a>
<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
<span class="sourceLineNo">312</span><a name="line.312"></a>
<span class="sourceLineNo">313</span>        int newCapacity = capacity;<a name="line.313"></a>
<span class="sourceLineNo">314</span>        int minCapacity = Math.max(minimumCapacity, limit);<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>        for (;;) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>            if (newCapacity &gt;&gt;&gt; 1 &lt; minCapacity) {<a name="line.317"></a>
<span class="sourceLineNo">318</span>                break;<a name="line.318"></a>
<span class="sourceLineNo">319</span>            }<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>            newCapacity &gt;&gt;&gt;= 1;<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>            if (minCapacity == 0) {<a name="line.323"></a>
<span class="sourceLineNo">324</span>                break;<a name="line.324"></a>
<span class="sourceLineNo">325</span>            }<a name="line.325"></a>
<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>        newCapacity = Math.max(minCapacity, newCapacity);<a name="line.328"></a>
<span class="sourceLineNo">329</span><a name="line.329"></a>
<span class="sourceLineNo">330</span>        if (newCapacity == capacity) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>            return this;<a name="line.331"></a>
<span class="sourceLineNo">332</span>        }<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
<span class="sourceLineNo">334</span>        // Shrink and compact:<a name="line.334"></a>
<span class="sourceLineNo">335</span>        //// Save the state.<a name="line.335"></a>
<span class="sourceLineNo">336</span>        ByteOrder bo = order();<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>        //// Reallocate.<a name="line.338"></a>
<span class="sourceLineNo">339</span>        ByteBuffer oldBuf = buf();<a name="line.339"></a>
<span class="sourceLineNo">340</span>        ByteBuffer newBuf = getAllocator().allocateNioBuffer(newCapacity, isDirect());<a name="line.340"></a>
<span class="sourceLineNo">341</span>        oldBuf.position(0);<a name="line.341"></a>
<span class="sourceLineNo">342</span>        oldBuf.limit(limit);<a name="line.342"></a>
<span class="sourceLineNo">343</span>        newBuf.put(oldBuf);<a name="line.343"></a>
<span class="sourceLineNo">344</span>        buf(newBuf);<a name="line.344"></a>
<span class="sourceLineNo">345</span><a name="line.345"></a>
<span class="sourceLineNo">346</span>        //// Restore the state.<a name="line.346"></a>
<span class="sourceLineNo">347</span>        buf().position(position);<a name="line.347"></a>
<span class="sourceLineNo">348</span>        buf().limit(limit);<a name="line.348"></a>
<span class="sourceLineNo">349</span>        buf().order(bo);<a name="line.349"></a>
<span class="sourceLineNo">350</span>        mark = -1;<a name="line.350"></a>
<span class="sourceLineNo">351</span><a name="line.351"></a>
<span class="sourceLineNo">352</span>        return this;<a name="line.352"></a>
<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
<span class="sourceLineNo">354</span><a name="line.354"></a>
<span class="sourceLineNo">355</span>    /**<a name="line.355"></a>
<span class="sourceLineNo">356</span>     * {@inheritDoc}<a name="line.356"></a>
<span class="sourceLineNo">357</span>     */<a name="line.357"></a>
<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
<span class="sourceLineNo">359</span>    public final int position() {<a name="line.359"></a>
<span class="sourceLineNo">360</span>        return buf().position();<a name="line.360"></a>
<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
<span class="sourceLineNo">362</span><a name="line.362"></a>
<span class="sourceLineNo">363</span>    /**<a name="line.363"></a>
<span class="sourceLineNo">364</span>     * {@inheritDoc}<a name="line.364"></a>
<span class="sourceLineNo">365</span>     */<a name="line.365"></a>
<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
<span class="sourceLineNo">367</span>    public final IoBuffer position(int newPosition) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>        autoExpand(newPosition, 0);<a name="line.368"></a>
<span class="sourceLineNo">369</span>        buf().position(newPosition);<a name="line.369"></a>
<span class="sourceLineNo">370</span>        <a name="line.370"></a>
<span class="sourceLineNo">371</span>        if (mark &gt; newPosition) {<a name="line.371"></a>
<span class="sourceLineNo">372</span>            mark = -1;<a name="line.372"></a>
<span class="sourceLineNo">373</span>        }<a name="line.373"></a>
<span class="sourceLineNo">374</span>        <a name="line.374"></a>
<span class="sourceLineNo">375</span>        return this;<a name="line.375"></a>
<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>    /**<a name="line.378"></a>
<span class="sourceLineNo">379</span>     * {@inheritDoc}<a name="line.379"></a>
<span class="sourceLineNo">380</span>     */<a name="line.380"></a>
<span class="sourceLineNo">381</span>    @Override<a name="line.381"></a>
<span class="sourceLineNo">382</span>    public final int limit() {<a name="line.382"></a>
<span class="sourceLineNo">383</span>        return buf().limit();<a name="line.383"></a>
<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
<span class="sourceLineNo">385</span><a name="line.385"></a>
<span class="sourceLineNo">386</span>    /**<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * {@inheritDoc}<a name="line.387"></a>
<span class="sourceLineNo">388</span>     */<a name="line.388"></a>
<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
<span class="sourceLineNo">390</span>    public final IoBuffer limit(int newLimit) {<a name="line.390"></a>
<span class="sourceLineNo">391</span>        autoExpand(newLimit, 0);<a name="line.391"></a>
<span class="sourceLineNo">392</span>        buf().limit(newLimit);<a name="line.392"></a>
<span class="sourceLineNo">393</span>        if (mark &gt; newLimit) {<a name="line.393"></a>
<span class="sourceLineNo">394</span>            mark = -1;<a name="line.394"></a>
<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
<span class="sourceLineNo">396</span>        return this;<a name="line.396"></a>
<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
<span class="sourceLineNo">398</span><a name="line.398"></a>
<span class="sourceLineNo">399</span>    /**<a name="line.399"></a>
<span class="sourceLineNo">400</span>     * {@inheritDoc}<a name="line.400"></a>
<span class="sourceLineNo">401</span>     */<a name="line.401"></a>
<span class="sourceLineNo">402</span>    @Override<a name="line.402"></a>
<span class="sourceLineNo">403</span>    public final IoBuffer mark() {<a name="line.403"></a>
<span class="sourceLineNo">404</span>        ByteBuffer byteBuffer = buf();<a name="line.404"></a>
<span class="sourceLineNo">405</span>        byteBuffer.mark();<a name="line.405"></a>
<span class="sourceLineNo">406</span>        mark = byteBuffer.position();<a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
<span class="sourceLineNo">408</span>        return this;<a name="line.408"></a>
<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>    /**<a name="line.411"></a>
<span class="sourceLineNo">412</span>     * {@inheritDoc}<a name="line.412"></a>
<span class="sourceLineNo">413</span>     */<a name="line.413"></a>
<span class="sourceLineNo">414</span>    @Override<a name="line.414"></a>
<span class="sourceLineNo">415</span>    public final int markValue() {<a name="line.415"></a>
<span class="sourceLineNo">416</span>        return mark;<a name="line.416"></a>
<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
<span class="sourceLineNo">418</span><a name="line.418"></a>
<span class="sourceLineNo">419</span>    /**<a name="line.419"></a>
<span class="sourceLineNo">420</span>     * {@inheritDoc}<a name="line.420"></a>
<span class="sourceLineNo">421</span>     */<a name="line.421"></a>
<span class="sourceLineNo">422</span>    @Override<a name="line.422"></a>
<span class="sourceLineNo">423</span>    public final IoBuffer reset() {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        buf().reset();<a name="line.424"></a>
<span class="sourceLineNo">425</span>        return this;<a name="line.425"></a>
<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>    /**<a name="line.428"></a>
<span class="sourceLineNo">429</span>     * {@inheritDoc}<a name="line.429"></a>
<span class="sourceLineNo">430</span>     */<a name="line.430"></a>
<span class="sourceLineNo">431</span>    @Override<a name="line.431"></a>
<span class="sourceLineNo">432</span>    public final IoBuffer clear() {<a name="line.432"></a>
<span class="sourceLineNo">433</span>        buf().clear();<a name="line.433"></a>
<span class="sourceLineNo">434</span>        mark = -1;<a name="line.434"></a>
<span class="sourceLineNo">435</span>        return this;<a name="line.435"></a>
<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
<span class="sourceLineNo">438</span>    /**<a name="line.438"></a>
<span class="sourceLineNo">439</span>     * {@inheritDoc}<a name="line.439"></a>
<span class="sourceLineNo">440</span>     */<a name="line.440"></a>
<span class="sourceLineNo">441</span>    @Override<a name="line.441"></a>
<span class="sourceLineNo">442</span>    public final IoBuffer sweep() {<a name="line.442"></a>
<span class="sourceLineNo">443</span>        clear();<a name="line.443"></a>
<span class="sourceLineNo">444</span>        return fillAndReset(remaining());<a name="line.444"></a>
<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
<span class="sourceLineNo">446</span><a name="line.446"></a>
<span class="sourceLineNo">447</span>    /**<a name="line.447"></a>
<span class="sourceLineNo">448</span>     * {@inheritDoc}<a name="line.448"></a>
<span class="sourceLineNo">449</span>     */<a name="line.449"></a>
<span class="sourceLineNo">450</span>    @Override<a name="line.450"></a>
<span class="sourceLineNo">451</span>    public final IoBuffer sweep(byte value) {<a name="line.451"></a>
<span class="sourceLineNo">452</span>        clear();<a name="line.452"></a>
<span class="sourceLineNo">453</span>        return fillAndReset(value, remaining());<a name="line.453"></a>
<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
<span class="sourceLineNo">455</span><a name="line.455"></a>
<span class="sourceLineNo">456</span>    /**<a name="line.456"></a>
<span class="sourceLineNo">457</span>     * {@inheritDoc}<a name="line.457"></a>
<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
<span class="sourceLineNo">460</span>    public final IoBuffer flip() {<a name="line.460"></a>
<span class="sourceLineNo">461</span>        buf().flip();<a name="line.461"></a>
<span class="sourceLineNo">462</span>        mark = -1;<a name="line.462"></a>
<span class="sourceLineNo">463</span>        return this;<a name="line.463"></a>
<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
<span class="sourceLineNo">465</span><a name="line.465"></a>
<span class="sourceLineNo">466</span>    /**<a name="line.466"></a>
<span class="sourceLineNo">467</span>     * {@inheritDoc}<a name="line.467"></a>
<span class="sourceLineNo">468</span>     */<a name="line.468"></a>
<span class="sourceLineNo">469</span>    @Override<a name="line.469"></a>
<span class="sourceLineNo">470</span>    public final IoBuffer rewind() {<a name="line.470"></a>
<span class="sourceLineNo">471</span>        buf().rewind();<a name="line.471"></a>
<span class="sourceLineNo">472</span>        mark = -1;<a name="line.472"></a>
<span class="sourceLineNo">473</span>        return this;<a name="line.473"></a>
<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
<span class="sourceLineNo">475</span><a name="line.475"></a>
<span class="sourceLineNo">476</span>    /**<a name="line.476"></a>
<span class="sourceLineNo">477</span>     * {@inheritDoc}<a name="line.477"></a>
<span class="sourceLineNo">478</span>     */<a name="line.478"></a>
<span class="sourceLineNo">479</span>    @Override<a name="line.479"></a>
<span class="sourceLineNo">480</span>    public final int remaining() {<a name="line.480"></a>
<span class="sourceLineNo">481</span>        ByteBuffer byteBuffer = buf();<a name="line.481"></a>
<span class="sourceLineNo">482</span><a name="line.482"></a>
<span class="sourceLineNo">483</span>        return byteBuffer.limit() - byteBuffer.position();<a name="line.483"></a>
<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
<span class="sourceLineNo">486</span>    /**<a name="line.486"></a>
<span class="sourceLineNo">487</span>     * {@inheritDoc}<a name="line.487"></a>
<span class="sourceLineNo">488</span>     */<a name="line.488"></a>
<span class="sourceLineNo">489</span>    @Override<a name="line.489"></a>
<span class="sourceLineNo">490</span>    public final boolean hasRemaining() {<a name="line.490"></a>
<span class="sourceLineNo">491</span>        ByteBuffer byteBuffer = buf();<a name="line.491"></a>
<span class="sourceLineNo">492</span><a name="line.492"></a>
<span class="sourceLineNo">493</span>        return byteBuffer.limit() &gt; byteBuffer.position();<a name="line.493"></a>
<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>    /**<a name="line.496"></a>
<span class="sourceLineNo">497</span>     * {@inheritDoc}<a name="line.497"></a>
<span class="sourceLineNo">498</span>     */<a name="line.498"></a>
<span class="sourceLineNo">499</span>    @Override<a name="line.499"></a>
<span class="sourceLineNo">500</span>    public final byte get() {<a name="line.500"></a>
<span class="sourceLineNo">501</span>        return buf().get();<a name="line.501"></a>
<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
<span class="sourceLineNo">503</span><a name="line.503"></a>
<span class="sourceLineNo">504</span>    /**<a name="line.504"></a>
<span class="sourceLineNo">505</span>     * {@inheritDoc}<a name="line.505"></a>
<span class="sourceLineNo">506</span>     */<a name="line.506"></a>
<span class="sourceLineNo">507</span>    @Override<a name="line.507"></a>
<span class="sourceLineNo">508</span>    public final short getUnsigned() {<a name="line.508"></a>
<span class="sourceLineNo">509</span>        return (short) (get() &amp; 0xff);<a name="line.509"></a>
<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
<span class="sourceLineNo">511</span><a name="line.511"></a>
<span class="sourceLineNo">512</span>    /**<a name="line.512"></a>
<span class="sourceLineNo">513</span>     * {@inheritDoc}<a name="line.513"></a>
<span class="sourceLineNo">514</span>     */<a name="line.514"></a>
<span class="sourceLineNo">515</span>    @Override<a name="line.515"></a>
<span class="sourceLineNo">516</span>    public final IoBuffer put(byte b) {<a name="line.516"></a>
<span class="sourceLineNo">517</span>        autoExpand(1);<a name="line.517"></a>
<span class="sourceLineNo">518</span>        buf().put(b);<a name="line.518"></a>
<span class="sourceLineNo">519</span>        return this;<a name="line.519"></a>
<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
<span class="sourceLineNo">521</span><a name="line.521"></a>
<span class="sourceLineNo">522</span>    /**<a name="line.522"></a>
<span class="sourceLineNo">523</span>     * {@inheritDoc}<a name="line.523"></a>
<span class="sourceLineNo">524</span>     */<a name="line.524"></a>
<span class="sourceLineNo">525</span>    public IoBuffer putUnsigned(byte value) {<a name="line.525"></a>
<span class="sourceLineNo">526</span>        autoExpand(1);<a name="line.526"></a>
<span class="sourceLineNo">527</span>        buf().put((byte) (value &amp; 0xff));<a name="line.527"></a>
<span class="sourceLineNo">528</span>        return this;<a name="line.528"></a>
<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>    /**<a name="line.531"></a>
<span class="sourceLineNo">532</span>     * {@inheritDoc}<a name="line.532"></a>
<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
<span class="sourceLineNo">534</span>    public IoBuffer putUnsigned(int index, byte value) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>        autoExpand(index, 1);<a name="line.535"></a>
<span class="sourceLineNo">536</span>        buf().put(index, (byte) (value &amp; 0xff));<a name="line.536"></a>
<span class="sourceLineNo">537</span>        return this;<a name="line.537"></a>
<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
<span class="sourceLineNo">539</span><a name="line.539"></a>
<span class="sourceLineNo">540</span>    /**<a name="line.540"></a>
<span class="sourceLineNo">541</span>     * {@inheritDoc}<a name="line.541"></a>
<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
<span class="sourceLineNo">543</span>    public IoBuffer putUnsigned(short value) {<a name="line.543"></a>
<span class="sourceLineNo">544</span>        autoExpand(1);<a name="line.544"></a>
<span class="sourceLineNo">545</span>        buf().put((byte) (value &amp; 0x00ff));<a name="line.545"></a>
<span class="sourceLineNo">546</span>        return this;<a name="line.546"></a>
<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
<span class="sourceLineNo">548</span><a name="line.548"></a>
<span class="sourceLineNo">549</span>    /**<a name="line.549"></a>
<span class="sourceLineNo">550</span>     * {@inheritDoc}<a name="line.550"></a>
<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
<span class="sourceLineNo">552</span>    public IoBuffer putUnsigned(int index, short value) {<a name="line.552"></a>
<span class="sourceLineNo">553</span>        autoExpand(index, 1);<a name="line.553"></a>
<span class="sourceLineNo">554</span>        buf().put(index, (byte) (value &amp; 0x00ff));<a name="line.554"></a>
<span class="sourceLineNo">555</span>        return this;<a name="line.555"></a>
<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>    /**<a name="line.558"></a>
<span class="sourceLineNo">559</span>     * {@inheritDoc}<a name="line.559"></a>
<span class="sourceLineNo">560</span>     */<a name="line.560"></a>
<span class="sourceLineNo">561</span>    public IoBuffer putUnsigned(int value) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>        autoExpand(1);<a name="line.562"></a>
<span class="sourceLineNo">563</span>        buf().put((byte) (value &amp; 0x000000ff));<a name="line.563"></a>
<span class="sourceLineNo">564</span>        return this;<a name="line.564"></a>
<span class="sourceLineNo">565</span>    }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>    /**<a name="line.567"></a>
<span class="sourceLineNo">568</span>     * {@inheritDoc}<a name="line.568"></a>
<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
<span class="sourceLineNo">570</span>    public IoBuffer putUnsigned(int index, int value) {<a name="line.570"></a>
<span class="sourceLineNo">571</span>        autoExpand(index, 1);<a name="line.571"></a>
<span class="sourceLineNo">572</span>        buf().put(index, (byte) (value &amp; 0x000000ff));<a name="line.572"></a>
<span class="sourceLineNo">573</span>        return this;<a name="line.573"></a>
<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>    /**<a name="line.576"></a>
<span class="sourceLineNo">577</span>     * {@inheritDoc}<a name="line.577"></a>
<span class="sourceLineNo">578</span>     */<a name="line.578"></a>
<span class="sourceLineNo">579</span>    public IoBuffer putUnsigned(long value) {<a name="line.579"></a>
<span class="sourceLineNo">580</span>        autoExpand(1);<a name="line.580"></a>
<span class="sourceLineNo">581</span>        buf().put((byte) (value &amp; 0x00000000000000ffL));<a name="line.581"></a>
<span class="sourceLineNo">582</span>        return this;<a name="line.582"></a>
<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>    /**<a name="line.585"></a>
<span class="sourceLineNo">586</span>     * {@inheritDoc}<a name="line.586"></a>
<span class="sourceLineNo">587</span>     */<a name="line.587"></a>
<span class="sourceLineNo">588</span>    public IoBuffer putUnsigned(int index, long value) {<a name="line.588"></a>
<span class="sourceLineNo">589</span>        autoExpand(index, 1);<a name="line.589"></a>
<span class="sourceLineNo">590</span>        buf().put(index, (byte) (value &amp; 0x00000000000000ffL));<a name="line.590"></a>
<span class="sourceLineNo">591</span>        return this;<a name="line.591"></a>
<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>    /**<a name="line.594"></a>
<span class="sourceLineNo">595</span>     * {@inheritDoc}<a name="line.595"></a>
<span class="sourceLineNo">596</span>     */<a name="line.596"></a>
<span class="sourceLineNo">597</span>    @Override<a name="line.597"></a>
<span class="sourceLineNo">598</span>    public final byte get(int index) {<a name="line.598"></a>
<span class="sourceLineNo">599</span>        return buf().get(index);<a name="line.599"></a>
<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
<span class="sourceLineNo">601</span><a name="line.601"></a>
<span class="sourceLineNo">602</span>    /**<a name="line.602"></a>
<span class="sourceLineNo">603</span>     * {@inheritDoc}<a name="line.603"></a>
<span class="sourceLineNo">604</span>     */<a name="line.604"></a>
<span class="sourceLineNo">605</span>    @Override<a name="line.605"></a>
<span class="sourceLineNo">606</span>    public final short getUnsigned(int index) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>        return (short) (get(index) &amp; 0xff);<a name="line.607"></a>
<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
<span class="sourceLineNo">609</span><a name="line.609"></a>
<span class="sourceLineNo">610</span>    /**<a name="line.610"></a>
<span class="sourceLineNo">611</span>     * {@inheritDoc}<a name="line.611"></a>
<span class="sourceLineNo">612</span>     */<a name="line.612"></a>
<span class="sourceLineNo">613</span>    @Override<a name="line.613"></a>
<span class="sourceLineNo">614</span>    public final IoBuffer put(int index, byte b) {<a name="line.614"></a>
<span class="sourceLineNo">615</span>        autoExpand(index, 1);<a name="line.615"></a>
<span class="sourceLineNo">616</span>        buf().put(index, b);<a name="line.616"></a>
<span class="sourceLineNo">617</span>        return this;<a name="line.617"></a>
<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>    /**<a name="line.620"></a>
<span class="sourceLineNo">621</span>     * {@inheritDoc}<a name="line.621"></a>
<span class="sourceLineNo">622</span>     */<a name="line.622"></a>
<span class="sourceLineNo">623</span>    @Override<a name="line.623"></a>
<span class="sourceLineNo">624</span>    public final IoBuffer get(byte[] dst, int offset, int length) {<a name="line.624"></a>
<span class="sourceLineNo">625</span>        buf().get(dst, offset, length);<a name="line.625"></a>
<span class="sourceLineNo">626</span>        return this;<a name="line.626"></a>
<span class="sourceLineNo">627</span>    }<a name="line.627"></a>
<span class="sourceLineNo">628</span><a name="line.628"></a>
<span class="sourceLineNo">629</span>    /**<a name="line.629"></a>
<span class="sourceLineNo">630</span>     * {@inheritDoc}<a name="line.630"></a>
<span class="sourceLineNo">631</span>     */<a name="line.631"></a>
<span class="sourceLineNo">632</span>    @Override<a name="line.632"></a>
<span class="sourceLineNo">633</span>    public final IoBuffer put(ByteBuffer src) {<a name="line.633"></a>
<span class="sourceLineNo">634</span>        autoExpand(src.remaining());<a name="line.634"></a>
<span class="sourceLineNo">635</span>        buf().put(src);<a name="line.635"></a>
<span class="sourceLineNo">636</span>        return this;<a name="line.636"></a>
<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
<span class="sourceLineNo">638</span><a name="line.638"></a>
<span class="sourceLineNo">639</span>    /**<a name="line.639"></a>
<span class="sourceLineNo">640</span>     * {@inheritDoc}<a name="line.640"></a>
<span class="sourceLineNo">641</span>     */<a name="line.641"></a>
<span class="sourceLineNo">642</span>    @Override<a name="line.642"></a>
<span class="sourceLineNo">643</span>    public final IoBuffer put(byte[] src, int offset, int length) {<a name="line.643"></a>
<span class="sourceLineNo">644</span>        autoExpand(length);<a name="line.644"></a>
<span class="sourceLineNo">645</span>        buf().put(src, offset, length);<a name="line.645"></a>
<span class="sourceLineNo">646</span>        return this;<a name="line.646"></a>
<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
<span class="sourceLineNo">648</span><a name="line.648"></a>
<span class="sourceLineNo">649</span>    /**<a name="line.649"></a>
<span class="sourceLineNo">650</span>     * {@inheritDoc}<a name="line.650"></a>
<span class="sourceLineNo">651</span>     */<a name="line.651"></a>
<span class="sourceLineNo">652</span>    @Override<a name="line.652"></a>
<span class="sourceLineNo">653</span>    public final IoBuffer compact() {<a name="line.653"></a>
<span class="sourceLineNo">654</span>        int remaining = remaining();<a name="line.654"></a>
<span class="sourceLineNo">655</span>        int capacity = capacity();<a name="line.655"></a>
<span class="sourceLineNo">656</span><a name="line.656"></a>
<span class="sourceLineNo">657</span>        if (capacity == 0) {<a name="line.657"></a>
<span class="sourceLineNo">658</span>            return this;<a name="line.658"></a>
<span class="sourceLineNo">659</span>        }<a name="line.659"></a>
<span class="sourceLineNo">660</span><a name="line.660"></a>
<span class="sourceLineNo">661</span>        if (isAutoShrink() &amp;&amp; remaining &lt;= capacity &gt;&gt;&gt; 2 &amp;&amp; capacity &gt; minimumCapacity) {<a name="line.661"></a>
<span class="sourceLineNo">662</span>            int newCapacity = capacity;<a name="line.662"></a>
<span class="sourceLineNo">663</span>            int minCapacity = Math.max(minimumCapacity, remaining &lt;&lt; 1);<a name="line.663"></a>
<span class="sourceLineNo">664</span>            for (;;) {<a name="line.664"></a>
<span class="sourceLineNo">665</span>                if (newCapacity &gt;&gt;&gt; 1 &lt; minCapacity) {<a name="line.665"></a>
<span class="sourceLineNo">666</span>                    break;<a name="line.666"></a>
<span class="sourceLineNo">667</span>                }<a name="line.667"></a>
<span class="sourceLineNo">668</span>                newCapacity &gt;&gt;&gt;= 1;<a name="line.668"></a>
<span class="sourceLineNo">669</span>            }<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>            newCapacity = Math.max(minCapacity, newCapacity);<a name="line.671"></a>
<span class="sourceLineNo">672</span><a name="line.672"></a>
<span class="sourceLineNo">673</span>            if (newCapacity == capacity) {<a name="line.673"></a>
<span class="sourceLineNo">674</span>                return this;<a name="line.674"></a>
<span class="sourceLineNo">675</span>            }<a name="line.675"></a>
<span class="sourceLineNo">676</span><a name="line.676"></a>
<span class="sourceLineNo">677</span>            // Shrink and compact:<a name="line.677"></a>
<span class="sourceLineNo">678</span>            //// Save the state.<a name="line.678"></a>
<span class="sourceLineNo">679</span>            ByteOrder bo = order();<a name="line.679"></a>
<span class="sourceLineNo">680</span><a name="line.680"></a>
<span class="sourceLineNo">681</span>            //// Sanity check.<a name="line.681"></a>
<span class="sourceLineNo">682</span>            if (remaining &gt; newCapacity) {<a name="line.682"></a>
<span class="sourceLineNo">683</span>                throw new IllegalStateException("The amount of the remaining bytes is greater than "<a name="line.683"></a>
<span class="sourceLineNo">684</span>                        + "the new capacity.");<a name="line.684"></a>
<span class="sourceLineNo">685</span>            }<a name="line.685"></a>
<span class="sourceLineNo">686</span><a name="line.686"></a>
<span class="sourceLineNo">687</span>            //// Reallocate.<a name="line.687"></a>
<span class="sourceLineNo">688</span>            ByteBuffer oldBuf = buf();<a name="line.688"></a>
<span class="sourceLineNo">689</span>            ByteBuffer newBuf = getAllocator().allocateNioBuffer(newCapacity, isDirect());<a name="line.689"></a>
<span class="sourceLineNo">690</span>            newBuf.put(oldBuf);<a name="line.690"></a>
<span class="sourceLineNo">691</span>            buf(newBuf);<a name="line.691"></a>
<span class="sourceLineNo">692</span><a name="line.692"></a>
<span class="sourceLineNo">693</span>            //// Restore the state.<a name="line.693"></a>
<span class="sourceLineNo">694</span>            buf().order(bo);<a name="line.694"></a>
<span class="sourceLineNo">695</span>        } else {<a name="line.695"></a>
<span class="sourceLineNo">696</span>            buf().compact();<a name="line.696"></a>
<span class="sourceLineNo">697</span>        }<a name="line.697"></a>
<span class="sourceLineNo">698</span>        mark = -1;<a name="line.698"></a>
<span class="sourceLineNo">699</span>        return this;<a name="line.699"></a>
<span class="sourceLineNo">700</span>    }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>    /**<a name="line.702"></a>
<span class="sourceLineNo">703</span>     * {@inheritDoc}<a name="line.703"></a>
<span class="sourceLineNo">704</span>     */<a name="line.704"></a>
<span class="sourceLineNo">705</span>    @Override<a name="line.705"></a>
<span class="sourceLineNo">706</span>    public final ByteOrder order() {<a name="line.706"></a>
<span class="sourceLineNo">707</span>        return buf().order();<a name="line.707"></a>
<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
<span class="sourceLineNo">709</span><a name="line.709"></a>
<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
<span class="sourceLineNo">711</span>     * {@inheritDoc}<a name="line.711"></a>
<span class="sourceLineNo">712</span>     */<a name="line.712"></a>
<span class="sourceLineNo">713</span>    @Override<a name="line.713"></a>
<span class="sourceLineNo">714</span>    public final IoBuffer order(ByteOrder bo) {<a name="line.714"></a>
<span class="sourceLineNo">715</span>        buf().order(bo);<a name="line.715"></a>
<span class="sourceLineNo">716</span>        return this;<a name="line.716"></a>
<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
<span class="sourceLineNo">718</span><a name="line.718"></a>
<span class="sourceLineNo">719</span>    /**<a name="line.719"></a>
<span class="sourceLineNo">720</span>     * {@inheritDoc}<a name="line.720"></a>
<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
<span class="sourceLineNo">722</span>    @Override<a name="line.722"></a>
<span class="sourceLineNo">723</span>    public final char getChar() {<a name="line.723"></a>
<span class="sourceLineNo">724</span>        return buf().getChar();<a name="line.724"></a>
<span class="sourceLineNo">725</span>    }<a name="line.725"></a>
<span class="sourceLineNo">726</span><a name="line.726"></a>
<span class="sourceLineNo">727</span>    /**<a name="line.727"></a>
<span class="sourceLineNo">728</span>     * {@inheritDoc}<a name="line.728"></a>
<span class="sourceLineNo">729</span>     */<a name="line.729"></a>
<span class="sourceLineNo">730</span>    @Override<a name="line.730"></a>
<span class="sourceLineNo">731</span>    public final IoBuffer putChar(char value) {<a name="line.731"></a>
<span class="sourceLineNo">732</span>        autoExpand(2);<a name="line.732"></a>
<span class="sourceLineNo">733</span>        buf().putChar(value);<a name="line.733"></a>
<span class="sourceLineNo">734</span>        return this;<a name="line.734"></a>
<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
<span class="sourceLineNo">736</span><a name="line.736"></a>
<span class="sourceLineNo">737</span>    /**<a name="line.737"></a>
<span class="sourceLineNo">738</span>     * {@inheritDoc}<a name="line.738"></a>
<span class="sourceLineNo">739</span>     */<a name="line.739"></a>
<span class="sourceLineNo">740</span>    @Override<a name="line.740"></a>
<span class="sourceLineNo">741</span>    public final char getChar(int index) {<a name="line.741"></a>
<span class="sourceLineNo">742</span>        return buf().getChar(index);<a name="line.742"></a>
<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
<span class="sourceLineNo">744</span><a name="line.744"></a>
<span class="sourceLineNo">745</span>    /**<a name="line.745"></a>
<span class="sourceLineNo">746</span>     * {@inheritDoc}<a name="line.746"></a>
<span class="sourceLineNo">747</span>     */<a name="line.747"></a>
<span class="sourceLineNo">748</span>    @Override<a name="line.748"></a>
<span class="sourceLineNo">749</span>    public final IoBuffer putChar(int index, char value) {<a name="line.749"></a>
<span class="sourceLineNo">750</span>        autoExpand(index, 2);<a name="line.750"></a>
<span class="sourceLineNo">751</span>        buf().putChar(index, value);<a name="line.751"></a>
<span class="sourceLineNo">752</span>        return this;<a name="line.752"></a>
<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
<span class="sourceLineNo">754</span><a name="line.754"></a>
<span class="sourceLineNo">755</span>    /**<a name="line.755"></a>
<span class="sourceLineNo">756</span>     * {@inheritDoc}<a name="line.756"></a>
<span class="sourceLineNo">757</span>     */<a name="line.757"></a>
<span class="sourceLineNo">758</span>    @Override<a name="line.758"></a>
<span class="sourceLineNo">759</span>    public final CharBuffer asCharBuffer() {<a name="line.759"></a>
<span class="sourceLineNo">760</span>        return buf().asCharBuffer();<a name="line.760"></a>
<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
<span class="sourceLineNo">762</span><a name="line.762"></a>
<span class="sourceLineNo">763</span>    /**<a name="line.763"></a>
<span class="sourceLineNo">764</span>     * {@inheritDoc}<a name="line.764"></a>
<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
<span class="sourceLineNo">766</span>    @Override<a name="line.766"></a>
<span class="sourceLineNo">767</span>    public final short getShort() {<a name="line.767"></a>
<span class="sourceLineNo">768</span>        return buf().getShort();<a name="line.768"></a>
<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
<span class="sourceLineNo">770</span><a name="line.770"></a>
<span class="sourceLineNo">771</span>    /**<a name="line.771"></a>
<span class="sourceLineNo">772</span>     * {@inheritDoc}<a name="line.772"></a>
<span class="sourceLineNo">773</span>     */<a name="line.773"></a>
<span class="sourceLineNo">774</span>    @Override<a name="line.774"></a>
<span class="sourceLineNo">775</span>    public final IoBuffer putShort(short value) {<a name="line.775"></a>
<span class="sourceLineNo">776</span>        autoExpand(2);<a name="line.776"></a>
<span class="sourceLineNo">777</span>        buf().putShort(value);<a name="line.777"></a>
<span class="sourceLineNo">778</span>        return this;<a name="line.778"></a>
<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
<span class="sourceLineNo">780</span><a name="line.780"></a>
<span class="sourceLineNo">781</span>    /**<a name="line.781"></a>
<span class="sourceLineNo">782</span>     * {@inheritDoc}<a name="line.782"></a>
<span class="sourceLineNo">783</span>     */<a name="line.783"></a>
<span class="sourceLineNo">784</span>    @Override<a name="line.784"></a>
<span class="sourceLineNo">785</span>    public final short getShort(int index) {<a name="line.785"></a>
<span class="sourceLineNo">786</span>        return buf().getShort(index);<a name="line.786"></a>
<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>    /**<a name="line.789"></a>
<span class="sourceLineNo">790</span>     * {@inheritDoc}<a name="line.790"></a>
<span class="sourceLineNo">791</span>     */<a name="line.791"></a>
<span class="sourceLineNo">792</span>    @Override<a name="line.792"></a>
<span class="sourceLineNo">793</span>    public final IoBuffer putShort(int index, short value) {<a name="line.793"></a>
<span class="sourceLineNo">794</span>        autoExpand(index, 2);<a name="line.794"></a>
<span class="sourceLineNo">795</span>        buf().putShort(index, value);<a name="line.795"></a>
<span class="sourceLineNo">796</span>        return this;<a name="line.796"></a>
<span class="sourceLineNo">797</span>    }<a name="line.797"></a>
<span class="sourceLineNo">798</span><a name="line.798"></a>
<span class="sourceLineNo">799</span>    /**<a name="line.799"></a>
<span class="sourceLineNo">800</span>     * {@inheritDoc}<a name="line.800"></a>
<span class="sourceLineNo">801</span>     */<a name="line.801"></a>
<span class="sourceLineNo">802</span>    @Override<a name="line.802"></a>
<span class="sourceLineNo">803</span>    public final ShortBuffer asShortBuffer() {<a name="line.803"></a>
<span class="sourceLineNo">804</span>        return buf().asShortBuffer();<a name="line.804"></a>
<span class="sourceLineNo">805</span>    }<a name="line.805"></a>
<span class="sourceLineNo">806</span><a name="line.806"></a>
<span class="sourceLineNo">807</span>    /**<a name="line.807"></a>
<span class="sourceLineNo">808</span>     * {@inheritDoc}<a name="line.808"></a>
<span class="sourceLineNo">809</span>     */<a name="line.809"></a>
<span class="sourceLineNo">810</span>    @Override<a name="line.810"></a>
<span class="sourceLineNo">811</span>    public final int getInt() {<a name="line.811"></a>
<span class="sourceLineNo">812</span>        return buf().getInt();<a name="line.812"></a>
<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
<span class="sourceLineNo">814</span><a name="line.814"></a>
<span class="sourceLineNo">815</span>    /**<a name="line.815"></a>
<span class="sourceLineNo">816</span>     * {@inheritDoc}<a name="line.816"></a>
<span class="sourceLineNo">817</span>     */<a name="line.817"></a>
<span class="sourceLineNo">818</span>    @Override<a name="line.818"></a>
<span class="sourceLineNo">819</span>    public final IoBuffer putInt(int value) {<a name="line.819"></a>
<span class="sourceLineNo">820</span>        autoExpand(4);<a name="line.820"></a>
<span class="sourceLineNo">821</span>        buf().putInt(value);<a name="line.821"></a>
<span class="sourceLineNo">822</span>        return this;<a name="line.822"></a>
<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
<span class="sourceLineNo">824</span><a name="line.824"></a>
<span class="sourceLineNo">825</span>    /**<a name="line.825"></a>
<span class="sourceLineNo">826</span>     * {@inheritDoc}<a name="line.826"></a>
<span class="sourceLineNo">827</span>     */<a name="line.827"></a>
<span class="sourceLineNo">828</span>    @Override<a name="line.828"></a>
<span class="sourceLineNo">829</span>    public final IoBuffer putUnsignedInt(byte value) {<a name="line.829"></a>
<span class="sourceLineNo">830</span>        autoExpand(4);<a name="line.830"></a>
<span class="sourceLineNo">831</span>        buf().putInt((value &amp; 0x00ff));<a name="line.831"></a>
<span class="sourceLineNo">832</span>        return this;<a name="line.832"></a>
<span class="sourceLineNo">833</span>    }<a name="line.833"></a>
<span class="sourceLineNo">834</span><a name="line.834"></a>
<span class="sourceLineNo">835</span>    /**<a name="line.835"></a>
<span class="sourceLineNo">836</span>     * {@inheritDoc}<a name="line.836"></a>
<span class="sourceLineNo">837</span>     */<a name="line.837"></a>
<span class="sourceLineNo">838</span>    @Override<a name="line.838"></a>
<span class="sourceLineNo">839</span>    public final IoBuffer putUnsignedInt(int index, byte value) {<a name="line.839"></a>
<span class="sourceLineNo">840</span>        autoExpand(index, 4);<a name="line.840"></a>
<span class="sourceLineNo">841</span>        buf().putInt(index, (value &amp; 0x00ff));<a name="line.841"></a>
<span class="sourceLineNo">842</span>        return this;<a name="line.842"></a>
<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
<span class="sourceLineNo">844</span><a name="line.844"></a>
<span class="sourceLineNo">845</span>    /**<a name="line.845"></a>
<span class="sourceLineNo">846</span>     * {@inheritDoc}<a name="line.846"></a>
<span class="sourceLineNo">847</span>     */<a name="line.847"></a>
<span class="sourceLineNo">848</span>    @Override<a name="line.848"></a>
<span class="sourceLineNo">849</span>    public final IoBuffer putUnsignedInt(short value) {<a name="line.849"></a>
<span class="sourceLineNo">850</span>        autoExpand(4);<a name="line.850"></a>
<span class="sourceLineNo">851</span>        buf().putInt((value &amp; 0x0000ffff));<a name="line.851"></a>
<span class="sourceLineNo">852</span>        return this;<a name="line.852"></a>
<span class="sourceLineNo">853</span>    }<a name="line.853"></a>
<span class="sourceLineNo">854</span><a name="line.854"></a>
<span class="sourceLineNo">855</span>    /**<a name="line.855"></a>
<span class="sourceLineNo">856</span>     * {@inheritDoc}<a name="line.856"></a>
<span class="sourceLineNo">857</span>     */<a name="line.857"></a>
<span class="sourceLineNo">858</span>    @Override<a name="line.858"></a>
<span class="sourceLineNo">859</span>    public final IoBuffer putUnsignedInt(int index, short value) {<a name="line.859"></a>
<span class="sourceLineNo">860</span>        autoExpand(index, 4);<a name="line.860"></a>
<span class="sourceLineNo">861</span>        buf().putInt(index, (value &amp; 0x0000ffff));<a name="line.861"></a>
<span class="sourceLineNo">862</span>        return this;<a name="line.862"></a>
<span class="sourceLineNo">863</span>    }<a name="line.863"></a>
<span class="sourceLineNo">864</span><a name="line.864"></a>
<span class="sourceLineNo">865</span>    /**<a name="line.865"></a>
<span class="sourceLineNo">866</span>     * {@inheritDoc}<a name="line.866"></a>
<span class="sourceLineNo">867</span>     */<a name="line.867"></a>
<span class="sourceLineNo">868</span>    @Override<a name="line.868"></a>
<span class="sourceLineNo">869</span>    public final IoBuffer putUnsignedInt(int value) {<a name="line.869"></a>
<span class="sourceLineNo">870</span>        autoExpand(4);<a name="line.870"></a>
<span class="sourceLineNo">871</span>        buf().putInt(value);<a name="line.871"></a>
<span class="sourceLineNo">872</span>        return this;<a name="line.872"></a>
<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
<span class="sourceLineNo">874</span><a name="line.874"></a>
<span class="sourceLineNo">875</span>    /**<a name="line.875"></a>
<span class="sourceLineNo">876</span>     * {@inheritDoc}<a name="line.876"></a>
<span class="sourceLineNo">877</span>     */<a name="line.877"></a>
<span class="sourceLineNo">878</span>    @Override<a name="line.878"></a>
<span class="sourceLineNo">879</span>    public final IoBuffer putUnsignedInt(int index, int value) {<a name="line.879"></a>
<span class="sourceLineNo">880</span>        autoExpand(index, 4);<a name="line.880"></a>
<span class="sourceLineNo">881</span>        buf().putInt(index, value);<a name="line.881"></a>
<span class="sourceLineNo">882</span>        return this;<a name="line.882"></a>
<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
<span class="sourceLineNo">884</span><a name="line.884"></a>
<span class="sourceLineNo">885</span>    /**<a name="line.885"></a>
<span class="sourceLineNo">886</span>     * {@inheritDoc}<a name="line.886"></a>
<span class="sourceLineNo">887</span>     */<a name="line.887"></a>
<span class="sourceLineNo">888</span>    @Override<a name="line.888"></a>
<span class="sourceLineNo">889</span>    public final IoBuffer putUnsignedInt(long value) {<a name="line.889"></a>
<span class="sourceLineNo">890</span>        autoExpand(4);<a name="line.890"></a>
<span class="sourceLineNo">891</span>        buf().putInt((int) (value &amp; 0x00000000ffffffff));<a name="line.891"></a>
<span class="sourceLineNo">892</span>        return this;<a name="line.892"></a>
<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
<span class="sourceLineNo">894</span><a name="line.894"></a>
<span class="sourceLineNo">895</span>    /**<a name="line.895"></a>
<span class="sourceLineNo">896</span>     * {@inheritDoc}<a name="line.896"></a>
<span class="sourceLineNo">897</span>     */<a name="line.897"></a>
<span class="sourceLineNo">898</span>    @Override<a name="line.898"></a>
<span class="sourceLineNo">899</span>    public final IoBuffer putUnsignedInt(int index, long value) {<a name="line.899"></a>
<span class="sourceLineNo">900</span>        autoExpand(index, 4);<a name="line.900"></a>
<span class="sourceLineNo">901</span>        buf().putInt(index, (int) (value &amp; 0x00000000ffffffffL));<a name="line.901"></a>
<span class="sourceLineNo">902</span>        return this;<a name="line.902"></a>
<span class="sourceLineNo">903</span>    }<a name="line.903"></a>
<span class="sourceLineNo">904</span><a name="line.904"></a>
<span class="sourceLineNo">905</span>    /**<a name="line.905"></a>
<span class="sourceLineNo">906</span>     * {@inheritDoc}<a name="line.906"></a>
<span class="sourceLineNo">907</span>     */<a name="line.907"></a>
<span class="sourceLineNo">908</span>    @Override<a name="line.908"></a>
<span class="sourceLineNo">909</span>    public final IoBuffer putUnsignedShort(byte value) {<a name="line.909"></a>
<span class="sourceLineNo">910</span>        autoExpand(2);<a name="line.910"></a>
<span class="sourceLineNo">911</span>        buf().putShort((short) (value &amp; 0x00ff));<a name="line.911"></a>
<span class="sourceLineNo">912</span>        return this;<a name="line.912"></a>
<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
<span class="sourceLineNo">914</span><a name="line.914"></a>
<span class="sourceLineNo">915</span>    /**<a name="line.915"></a>
<span class="sourceLineNo">916</span>     * {@inheritDoc}<a name="line.916"></a>
<span class="sourceLineNo">917</span>     */<a name="line.917"></a>
<span class="sourceLineNo">918</span>    @Override<a name="line.918"></a>
<span class="sourceLineNo">919</span>    public final IoBuffer putUnsignedShort(int index, byte value) {<a name="line.919"></a>
<span class="sourceLineNo">920</span>        autoExpand(index, 2);<a name="line.920"></a>
<span class="sourceLineNo">921</span>        buf().putShort(index, (short) (value &amp; 0x00ff));<a name="line.921"></a>
<span class="sourceLineNo">922</span>        return this;<a name="line.922"></a>
<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
<span class="sourceLineNo">924</span><a name="line.924"></a>
<span class="sourceLineNo">925</span>    /**<a name="line.925"></a>
<span class="sourceLineNo">926</span>     * {@inheritDoc}<a name="line.926"></a>
<span class="sourceLineNo">927</span>     */<a name="line.927"></a>
<span class="sourceLineNo">928</span>    @Override<a name="line.928"></a>
<span class="sourceLineNo">929</span>    public final IoBuffer putUnsignedShort(short value) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>        autoExpand(2);<a name="line.930"></a>
<span class="sourceLineNo">931</span>        buf().putShort(value);<a name="line.931"></a>
<span class="sourceLineNo">932</span>        return this;<a name="line.932"></a>
<span class="sourceLineNo">933</span>    }<a name="line.933"></a>
<span class="sourceLineNo">934</span><a name="line.934"></a>
<span class="sourceLineNo">935</span>    /**<a name="line.935"></a>
<span class="sourceLineNo">936</span>     * {@inheritDoc}<a name="line.936"></a>
<span class="sourceLineNo">937</span>     */<a name="line.937"></a>
<span class="sourceLineNo">938</span>    @Override<a name="line.938"></a>
<span class="sourceLineNo">939</span>    public final IoBuffer putUnsignedShort(int index, short value) {<a name="line.939"></a>
<span class="sourceLineNo">940</span>        autoExpand(index, 2);<a name="line.940"></a>
<span class="sourceLineNo">941</span>        buf().putShort(index, value);<a name="line.941"></a>
<span class="sourceLineNo">942</span>        return this;<a name="line.942"></a>
<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
<span class="sourceLineNo">944</span><a name="line.944"></a>
<span class="sourceLineNo">945</span>    /**<a name="line.945"></a>
<span class="sourceLineNo">946</span>     * {@inheritDoc}<a name="line.946"></a>
<span class="sourceLineNo">947</span>     */<a name="line.947"></a>
<span class="sourceLineNo">948</span>    @Override<a name="line.948"></a>
<span class="sourceLineNo">949</span>    public final IoBuffer putUnsignedShort(int value) {<a name="line.949"></a>
<span class="sourceLineNo">950</span>        autoExpand(2);<a name="line.950"></a>
<span class="sourceLineNo">951</span>        buf().putShort((short) value);<a name="line.951"></a>
<span class="sourceLineNo">952</span>        return this;<a name="line.952"></a>
<span class="sourceLineNo">953</span>    }<a name="line.953"></a>
<span class="sourceLineNo">954</span><a name="line.954"></a>
<span class="sourceLineNo">955</span>    /**<a name="line.955"></a>
<span class="sourceLineNo">956</span>     * {@inheritDoc}<a name="line.956"></a>
<span class="sourceLineNo">957</span>     */<a name="line.957"></a>
<span class="sourceLineNo">958</span>    @Override<a name="line.958"></a>
<span class="sourceLineNo">959</span>    public final IoBuffer putUnsignedShort(int index, int value) {<a name="line.959"></a>
<span class="sourceLineNo">960</span>        autoExpand(index, 2);<a name="line.960"></a>
<span class="sourceLineNo">961</span>        buf().putShort(index, (short) value);<a name="line.961"></a>
<span class="sourceLineNo">962</span>        return this;<a name="line.962"></a>
<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
<span class="sourceLineNo">964</span><a name="line.964"></a>
<span class="sourceLineNo">965</span>    /**<a name="line.965"></a>
<span class="sourceLineNo">966</span>     * {@inheritDoc}<a name="line.966"></a>
<span class="sourceLineNo">967</span>     */<a name="line.967"></a>
<span class="sourceLineNo">968</span>    @Override<a name="line.968"></a>
<span class="sourceLineNo">969</span>    public final IoBuffer putUnsignedShort(long value) {<a name="line.969"></a>
<span class="sourceLineNo">970</span>        autoExpand(2);<a name="line.970"></a>
<span class="sourceLineNo">971</span>        buf().putShort((short) (value));<a name="line.971"></a>
<span class="sourceLineNo">972</span>        return this;<a name="line.972"></a>
<span class="sourceLineNo">973</span>    }<a name="line.973"></a>
<span class="sourceLineNo">974</span><a name="line.974"></a>
<span class="sourceLineNo">975</span>    /**<a name="line.975"></a>
<span class="sourceLineNo">976</span>     * {@inheritDoc}<a name="line.976"></a>
<span class="sourceLineNo">977</span>     */<a name="line.977"></a>
<span class="sourceLineNo">978</span>    @Override<a name="line.978"></a>
<span class="sourceLineNo">979</span>    public final IoBuffer putUnsignedShort(int index, long value) {<a name="line.979"></a>
<span class="sourceLineNo">980</span>        autoExpand(index, 2);<a name="line.980"></a>
<span class="sourceLineNo">981</span>        buf().putShort(index, (short) (value));<a name="line.981"></a>
<span class="sourceLineNo">982</span>        return this;<a name="line.982"></a>
<span class="sourceLineNo">983</span>    }<a name="line.983"></a>
<span class="sourceLineNo">984</span><a name="line.984"></a>
<span class="sourceLineNo">985</span>    /**<a name="line.985"></a>
<span class="sourceLineNo">986</span>     * {@inheritDoc}<a name="line.986"></a>
<span class="sourceLineNo">987</span>     */<a name="line.987"></a>
<span class="sourceLineNo">988</span>    @Override<a name="line.988"></a>
<span class="sourceLineNo">989</span>    public final int getInt(int index) {<a name="line.989"></a>
<span class="sourceLineNo">990</span>        return buf().getInt(index);<a name="line.990"></a>
<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
<span class="sourceLineNo">992</span><a name="line.992"></a>
<span class="sourceLineNo">993</span>    /**<a name="line.993"></a>
<span class="sourceLineNo">994</span>     * {@inheritDoc}<a name="line.994"></a>
<span class="sourceLineNo">995</span>     */<a name="line.995"></a>
<span class="sourceLineNo">996</span>    @Override<a name="line.996"></a>
<span class="sourceLineNo">997</span>    public final IoBuffer putInt(int index, int value) {<a name="line.997"></a>
<span class="sourceLineNo">998</span>        autoExpand(index, 4);<a name="line.998"></a>
<span class="sourceLineNo">999</span>        buf().putInt(index, value);<a name="line.999"></a>
<span class="sourceLineNo">1000</span>        return this;<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>    }<a name="line.1001"></a>
<span class="sourceLineNo">1002</span><a name="line.1002"></a>
<span class="sourceLineNo">1003</span>    /**<a name="line.1003"></a>
<span class="sourceLineNo">1004</span>     * {@inheritDoc}<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>     */<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    @Override<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>    public final IntBuffer asIntBuffer() {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>        return buf().asIntBuffer();<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>    }<a name="line.1009"></a>
<span class="sourceLineNo">1010</span><a name="line.1010"></a>
<span class="sourceLineNo">1011</span>    /**<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>     * {@inheritDoc}<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>     */<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>    @Override<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>    public final long getLong() {<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>        return buf().getLong();<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>    }<a name="line.1017"></a>
<span class="sourceLineNo">1018</span><a name="line.1018"></a>
<span class="sourceLineNo">1019</span>    /**<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>     * {@inheritDoc}<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>     */<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    @Override<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>    public final IoBuffer putLong(long value) {<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>        autoExpand(8);<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>        buf().putLong(value);<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>        return this;<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>    }<a name="line.1027"></a>
<span class="sourceLineNo">1028</span><a name="line.1028"></a>
<span class="sourceLineNo">1029</span>    /**<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>     * {@inheritDoc}<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>     */<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    @Override<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>    public final long getLong(int index) {<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>        return buf().getLong(index);<a name="line.1034"></a>
<span class="sourceLineNo">1035</span>    }<a name="line.1035"></a>
<span class="sourceLineNo">1036</span><a name="line.1036"></a>
<span class="sourceLineNo">1037</span>    /**<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>     * {@inheritDoc}<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>     */<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    @Override<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>    public final IoBuffer putLong(int index, long value) {<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>        autoExpand(index, 8);<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        buf().putLong(index, value);<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>        return this;<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>    }<a name="line.1045"></a>
<span class="sourceLineNo">1046</span><a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    /**<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>     * {@inheritDoc}<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>     */<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    @Override<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>    public final LongBuffer asLongBuffer() {<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>        return buf().asLongBuffer();<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
<span class="sourceLineNo">1054</span><a name="line.1054"></a>
<span class="sourceLineNo">1055</span>    /**<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>     * {@inheritDoc}<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>     */<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    @Override<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    public final float getFloat() {<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>        return buf().getFloat();<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
<span class="sourceLineNo">1062</span><a name="line.1062"></a>
<span class="sourceLineNo">1063</span>    /**<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>     * {@inheritDoc}<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>     */<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>    @Override<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    public final IoBuffer putFloat(float value) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>        autoExpand(4);<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>        buf().putFloat(value);<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>        return this;<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>    }<a name="line.1071"></a>
<span class="sourceLineNo">1072</span><a name="line.1072"></a>
<span class="sourceLineNo">1073</span>    /**<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>     * {@inheritDoc}<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>     */<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>    @Override<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>    public final float getFloat(int index) {<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>        return buf().getFloat(index);<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
<span class="sourceLineNo">1080</span><a name="line.1080"></a>
<span class="sourceLineNo">1081</span>    /**<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>     * {@inheritDoc}<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>     */<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    @Override<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>    public final IoBuffer putFloat(int index, float value) {<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>        autoExpand(index, 4);<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>        buf().putFloat(index, value);<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>        return this;<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>    }<a name="line.1089"></a>
<span class="sourceLineNo">1090</span><a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    /**<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>     * {@inheritDoc}<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>     */<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>    @Override<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>    public final FloatBuffer asFloatBuffer() {<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>        return buf().asFloatBuffer();<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>    }<a name="line.1097"></a>
<span class="sourceLineNo">1098</span><a name="line.1098"></a>
<span class="sourceLineNo">1099</span>    /**<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>     * {@inheritDoc}<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>     */<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    @Override<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>    public final double getDouble() {<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>        return buf().getDouble();<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    /**<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>     * {@inheritDoc}<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>     */<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    @Override<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    public final IoBuffer putDouble(double value) {<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>        autoExpand(8);<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>        buf().putDouble(value);<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>        return this;<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
<span class="sourceLineNo">1116</span><a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    /**<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>     * {@inheritDoc}<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>     */<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>    @Override<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>    public final double getDouble(int index) {<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>        return buf().getDouble(index);<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>    }<a name="line.1123"></a>
<span class="sourceLineNo">1124</span><a name="line.1124"></a>
<span class="sourceLineNo">1125</span>    /**<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>     * {@inheritDoc}<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>     */<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>    @Override<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    public final IoBuffer putDouble(int index, double value) {<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>        autoExpand(index, 8);<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>        buf().putDouble(index, value);<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>        return this;<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>    }<a name="line.1133"></a>
<span class="sourceLineNo">1134</span><a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    /**<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>     * {@inheritDoc}<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>     */<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    @Override<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>    public final DoubleBuffer asDoubleBuffer() {<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>        return buf().asDoubleBuffer();<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>    }<a name="line.1141"></a>
<span class="sourceLineNo">1142</span><a name="line.1142"></a>
<span class="sourceLineNo">1143</span>    /**<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>     * {@inheritDoc}<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>     */<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    @Override<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>    public final IoBuffer asReadOnlyBuffer() {<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>        recapacityAllowed = false;<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>        return asReadOnlyBuffer0();<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span><a name="line.1151"></a>
<span class="sourceLineNo">1152</span>    /**<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>     * Implement this method to return the unexpandable read only version of<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>     * this buffer.<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>     * <a name="line.1155"></a>
<span class="sourceLineNo">1156</span>     * @return the IoBoffer instance<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>     */<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>    protected abstract IoBuffer asReadOnlyBuffer0();<a name="line.1158"></a>
<span class="sourceLineNo">1159</span><a name="line.1159"></a>
<span class="sourceLineNo">1160</span>    /**<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>     * {@inheritDoc}<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>     */<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>    @Override<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>    public final IoBuffer duplicate() {<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>        recapacityAllowed = false;<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>        return duplicate0();<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
<span class="sourceLineNo">1168</span><a name="line.1168"></a>
<span class="sourceLineNo">1169</span>    /**<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>     * Implement this method to return the unexpandable duplicate of this<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>     * buffer.<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>     * <a name="line.1172"></a>
<span class="sourceLineNo">1173</span>     * @return the IoBoffer instance<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>     */<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    protected abstract IoBuffer duplicate0();<a name="line.1175"></a>
<span class="sourceLineNo">1176</span><a name="line.1176"></a>
<span class="sourceLineNo">1177</span>    /**<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>     * {@inheritDoc}<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>     */<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    @Override<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>    public final IoBuffer slice() {<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>        recapacityAllowed = false;<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>        return slice0();<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
<span class="sourceLineNo">1185</span><a name="line.1185"></a>
<span class="sourceLineNo">1186</span>    /**<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>     * {@inheritDoc}<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>     */<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>    @Override<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>    public final IoBuffer getSlice(int index, int length) {<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>        if (length &lt; 0) {<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>            throw new IllegalArgumentException("length: " + length);<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>        }<a name="line.1193"></a>
<span class="sourceLineNo">1194</span><a name="line.1194"></a>
<span class="sourceLineNo">1195</span>        int pos = position();<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>        int limit = limit();<a name="line.1196"></a>
<span class="sourceLineNo">1197</span><a name="line.1197"></a>
<span class="sourceLineNo">1198</span>        if (index &gt; limit) {<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>            throw new IllegalArgumentException("index: " + index);<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>        }<a name="line.1200"></a>
<span class="sourceLineNo">1201</span><a name="line.1201"></a>
<span class="sourceLineNo">1202</span>        int endIndex = index + length;<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>        if (endIndex &gt; limit) {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>            throw new IndexOutOfBoundsException("index + length (" + endIndex + ") is greater " + "than limit ("<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>                    + limit + ").");<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>        }<a name="line.1207"></a>
<span class="sourceLineNo">1208</span><a name="line.1208"></a>
<span class="sourceLineNo">1209</span>        clear();<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        limit(endIndex);<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>        position(index);<a name="line.1211"></a>
<span class="sourceLineNo">1212</span><a name="line.1212"></a>
<span class="sourceLineNo">1213</span>        IoBuffer slice = slice();<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>        limit(limit);<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>        position(pos);<a name="line.1215"></a>
<span class="sourceLineNo">1216</span><a name="line.1216"></a>
<span class="sourceLineNo">1217</span>        return slice;<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>    }<a name="line.1218"></a>
<span class="sourceLineNo">1219</span><a name="line.1219"></a>
<span class="sourceLineNo">1220</span>    /**<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>     * {@inheritDoc}<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>     */<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    @Override<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>    public final IoBuffer getSlice(int length) {<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>        if (length &lt; 0) {<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>            throw new IllegalArgumentException("length: " + length);<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>        }<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        int pos = position();<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>        int limit = limit();<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>        int nextPos = pos + length;<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>        if (limit &lt; nextPos) {<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>            throw new IndexOutOfBoundsException("position + length (" + nextPos + ") is greater " + "than limit ("<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>                    + limit + ").");<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>        }<a name="line.1234"></a>
<span class="sourceLineNo">1235</span><a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        limit(pos + length);<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>        IoBuffer slice = slice();<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>        position(nextPos);<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>        limit(limit);<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>        return slice;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>    }<a name="line.1241"></a>
<span class="sourceLineNo">1242</span><a name="line.1242"></a>
<span class="sourceLineNo">1243</span>    /**<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>     * Implement this method to return the unexpandable slice of this<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>     * buffer.<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>     * <a name="line.1246"></a>
<span class="sourceLineNo">1247</span>     * @return the IoBoffer instance<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>     */<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>    protected abstract IoBuffer slice0();<a name="line.1249"></a>
<span class="sourceLineNo">1250</span><a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    /**<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>     * {@inheritDoc}<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>     */<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>    @Override<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>    public int hashCode() {<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>        int h = 1;<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>        int p = position();<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>        for (int i = limit() - 1; i &gt;= p; i--) {<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>            h = 31 * h + get(i);<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>        }<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>        return h;<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>    }<a name="line.1262"></a>
<span class="sourceLineNo">1263</span><a name="line.1263"></a>
<span class="sourceLineNo">1264</span>    /**<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>     * {@inheritDoc}<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>     */<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>    @Override<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>    public boolean equals(Object o) {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>        if (!(o instanceof IoBuffer)) {<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>            return false;<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>        }<a name="line.1271"></a>
<span class="sourceLineNo">1272</span><a name="line.1272"></a>
<span class="sourceLineNo">1273</span>        IoBuffer that = (IoBuffer) o;<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>        if (this.remaining() != that.remaining()) {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>            return false;<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>        }<a name="line.1276"></a>
<span class="sourceLineNo">1277</span><a name="line.1277"></a>
<span class="sourceLineNo">1278</span>        int p = this.position();<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>        for (int i = this.limit() - 1, j = that.limit() - 1; i &gt;= p; i--, j--) {<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>            byte v1 = this.get(i);<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>            byte v2 = that.get(j);<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>            if (v1 != v2) {<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>                return false;<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>            }<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>        }<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>        return true;<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
<span class="sourceLineNo">1288</span><a name="line.1288"></a>
<span class="sourceLineNo">1289</span>    /**<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>     * {@inheritDoc}<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>     */<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>    public int compareTo(IoBuffer that) {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>        int n = this.position() + Math.min(this.remaining(), that.remaining());<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>        for (int i = this.position(), j = that.position(); i &lt; n; i++, j++) {<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>            byte v1 = this.get(i);<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>            byte v2 = that.get(j);<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>            if (v1 == v2) {<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>                continue;<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>            }<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>            if (v1 &lt; v2) {<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>                return -1;<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>            }<a name="line.1302"></a>
<span class="sourceLineNo">1303</span><a name="line.1303"></a>
<span class="sourceLineNo">1304</span>            return +1;<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>        }<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>        return this.remaining() - that.remaining();<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
<span class="sourceLineNo">1308</span><a name="line.1308"></a>
<span class="sourceLineNo">1309</span>    /**<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>     * {@inheritDoc}<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>     */<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>    @Override<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>    public String toString() {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>        StringBuilder buf = new StringBuilder();<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>        if (isDirect()) {<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>            buf.append("DirectBuffer");<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>        } else {<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>            buf.append("HeapBuffer");<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>        }<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>        buf.append("[pos=");<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>        buf.append(position());<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>        buf.append(" lim=");<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>        buf.append(limit());<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>        buf.append(" cap=");<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        buf.append(capacity());<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>        buf.append(": ");<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>        buf.append(getHexDump(16));<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>        buf.append(']');<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>        return buf.toString();<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span><a name="line.1331"></a>
<span class="sourceLineNo">1332</span>    /**<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>     * {@inheritDoc}<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>     */<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>    @Override<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    public IoBuffer get(byte[] dst) {<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>        return get(dst, 0, dst.length);<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>    }<a name="line.1338"></a>
<span class="sourceLineNo">1339</span><a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    /**<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>     * {@inheritDoc}<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>     */<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>    @Override<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>    public IoBuffer put(IoBuffer src) {<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        return put(src.buf());<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>    }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span><a name="line.1347"></a>
<span class="sourceLineNo">1348</span>    /**<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>     * {@inheritDoc}<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>     */<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>    @Override<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>    public IoBuffer put(byte[] src) {<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        return put(src, 0, src.length);<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
<span class="sourceLineNo">1355</span><a name="line.1355"></a>
<span class="sourceLineNo">1356</span>    /**<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>     * {@inheritDoc}<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>     */<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    @Override<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    public int getUnsignedShort() {<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>        return getShort() &amp; 0xffff;<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
<span class="sourceLineNo">1363</span><a name="line.1363"></a>
<span class="sourceLineNo">1364</span>    /**<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>     * {@inheritDoc}<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>     */<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>    @Override<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>    public int getUnsignedShort(int index) {<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>        return getShort(index) &amp; 0xffff;<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>    }<a name="line.1370"></a>
<span class="sourceLineNo">1371</span><a name="line.1371"></a>
<span class="sourceLineNo">1372</span>    /**<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>     * {@inheritDoc}<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>     */<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>    @Override<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>    public long getUnsignedInt() {<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>        return getInt() &amp; 0xffffffffL;<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
<span class="sourceLineNo">1379</span><a name="line.1379"></a>
<span class="sourceLineNo">1380</span>    /**<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>     * {@inheritDoc}<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>     */<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    @Override<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>    public int getMediumInt() {<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>        byte b1 = get();<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>        byte b2 = get();<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>        byte b3 = get();<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>            return getMediumInt(b1, b2, b3);<a name="line.1389"></a>
<span class="sourceLineNo">1390</span>        }<a name="line.1390"></a>
<span class="sourceLineNo">1391</span><a name="line.1391"></a>
<span class="sourceLineNo">1392</span>        return getMediumInt(b3, b2, b1);<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
<span class="sourceLineNo">1394</span><a name="line.1394"></a>
<span class="sourceLineNo">1395</span>    /**<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>     * {@inheritDoc}<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>     */<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>    @Override<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>    public int getUnsignedMediumInt() {<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>        int b1 = getUnsigned();<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>        int b2 = getUnsigned();<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>        int b3 = getUnsigned();<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>            return b1 &lt;&lt; 16 | b2 &lt;&lt; 8 | b3;<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>        }<a name="line.1405"></a>
<span class="sourceLineNo">1406</span><a name="line.1406"></a>
<span class="sourceLineNo">1407</span>        return b3 &lt;&lt; 16 | b2 &lt;&lt; 8 | b1;<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>    }<a name="line.1408"></a>
<span class="sourceLineNo">1409</span><a name="line.1409"></a>
<span class="sourceLineNo">1410</span>    /**<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>     * {@inheritDoc}<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>     */<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>    @Override<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>    public int getMediumInt(int index) {<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>        byte b1 = get(index);<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>        byte b2 = get(index + 1);<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>        byte b3 = get(index + 2);<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>            return getMediumInt(b1, b2, b3);<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>        }<a name="line.1420"></a>
<span class="sourceLineNo">1421</span><a name="line.1421"></a>
<span class="sourceLineNo">1422</span>        return getMediumInt(b3, b2, b1);<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
<span class="sourceLineNo">1424</span><a name="line.1424"></a>
<span class="sourceLineNo">1425</span>    /**<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>     * {@inheritDoc}<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>     */<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>    @Override<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>    public int getUnsignedMediumInt(int index) {<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>        int b1 = getUnsigned(index);<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>        int b2 = getUnsigned(index + 1);<a name="line.1431"></a>
<span class="sourceLineNo">1432</span>        int b3 = getUnsigned(index + 2);<a name="line.1432"></a>
<span class="sourceLineNo">1433</span>        <a name="line.1433"></a>
<span class="sourceLineNo">1434</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>            return b1 &lt;&lt; 16 | b2 &lt;&lt; 8 | b3;<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
<span class="sourceLineNo">1437</span><a name="line.1437"></a>
<span class="sourceLineNo">1438</span>        return b3 &lt;&lt; 16 | b2 &lt;&lt; 8 | b1;<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>    }<a name="line.1439"></a>
<span class="sourceLineNo">1440</span><a name="line.1440"></a>
<span class="sourceLineNo">1441</span>    /**<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>     * {@inheritDoc}<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>     */<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>    private int getMediumInt(byte b1, byte b2, byte b3) {<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>        int ret = b1 &lt;&lt; 16 &amp; 0xff0000 | b2 &lt;&lt; 8 &amp; 0xff00 | b3 &amp; 0xff;<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        // Check to see if the medium int is negative (high bit in b1 set)<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>        if ((b1 &amp; 0x80) == 0x80) {<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>            // Make the the whole int negative<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>            ret |= 0xff000000;<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>        }<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>        return ret;<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>    }<a name="line.1452"></a>
<span class="sourceLineNo">1453</span><a name="line.1453"></a>
<span class="sourceLineNo">1454</span>    /**<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>     * {@inheritDoc}<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>     */<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>    @Override<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>    public IoBuffer putMediumInt(int value) {<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>        byte b1 = (byte) (value &gt;&gt; 16);<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>        byte b2 = (byte) (value &gt;&gt; 8);<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>        byte b3 = (byte) value;<a name="line.1461"></a>
<span class="sourceLineNo">1462</span><a name="line.1462"></a>
<span class="sourceLineNo">1463</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>            put(b1).put(b2).put(b3);<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>        } else {<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>            put(b3).put(b2).put(b1);<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>        }<a name="line.1467"></a>
<span class="sourceLineNo">1468</span><a name="line.1468"></a>
<span class="sourceLineNo">1469</span>        return this;<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>    }<a name="line.1470"></a>
<span class="sourceLineNo">1471</span><a name="line.1471"></a>
<span class="sourceLineNo">1472</span>    /**<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>     * {@inheritDoc}<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>     */<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>    @Override<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>    public IoBuffer putMediumInt(int index, int value) {<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>        byte b1 = (byte) (value &gt;&gt; 16);<a name="line.1477"></a>
<span class="sourceLineNo">1478</span>        byte b2 = (byte) (value &gt;&gt; 8);<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>        byte b3 = (byte) value;<a name="line.1479"></a>
<span class="sourceLineNo">1480</span><a name="line.1480"></a>
<span class="sourceLineNo">1481</span>        if (ByteOrder.BIG_ENDIAN.equals(order())) {<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>            put(index, b1).put(index + 1, b2).put(index + 2, b3);<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>        } else {<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>            put(index, b3).put(index + 1, b2).put(index + 2, b1);<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>        }<a name="line.1485"></a>
<span class="sourceLineNo">1486</span><a name="line.1486"></a>
<span class="sourceLineNo">1487</span>        return this;<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>    }<a name="line.1488"></a>
<span class="sourceLineNo">1489</span><a name="line.1489"></a>
<span class="sourceLineNo">1490</span>    /**<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>     * {@inheritDoc}<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>     */<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>    @Override<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>    public long getUnsignedInt(int index) {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>        return getInt(index) &amp; 0xffffffffL;<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>    }<a name="line.1496"></a>
<span class="sourceLineNo">1497</span><a name="line.1497"></a>
<span class="sourceLineNo">1498</span>    /**<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>     * {@inheritDoc}<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>     */<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>    @Override<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>    public InputStream asInputStream() {<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>        return new InputStream() {<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>            @Override<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>            public int available() {<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>                return AbstractIoBuffer.this.remaining();<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>            }<a name="line.1507"></a>
<span class="sourceLineNo">1508</span><a name="line.1508"></a>
<span class="sourceLineNo">1509</span>            @Override<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>            public synchronized void mark(int readlimit) {<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>                AbstractIoBuffer.this.mark();<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>            }<a name="line.1512"></a>
<span class="sourceLineNo">1513</span><a name="line.1513"></a>
<span class="sourceLineNo">1514</span>            @Override<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>            public boolean markSupported() {<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>                return true;<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>            }<a name="line.1517"></a>
<span class="sourceLineNo">1518</span><a name="line.1518"></a>
<span class="sourceLineNo">1519</span>            @Override<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>            public int read() {<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>                if (AbstractIoBuffer.this.hasRemaining()) {<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>                    return AbstractIoBuffer.this.get() &amp; 0xff;<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>                }<a name="line.1523"></a>
<span class="sourceLineNo">1524</span><a name="line.1524"></a>
<span class="sourceLineNo">1525</span>                return -1;<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>            }<a name="line.1526"></a>
<span class="sourceLineNo">1527</span><a name="line.1527"></a>
<span class="sourceLineNo">1528</span>            @Override<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>            public int read(byte[] b, int off, int len) {<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>                int remaining = AbstractIoBuffer.this.remaining();<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>                if (remaining &gt; 0) {<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>                    int readBytes = Math.min(remaining, len);<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>                    AbstractIoBuffer.this.get(b, off, readBytes);<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>                    return readBytes;<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>                }<a name="line.1535"></a>
<span class="sourceLineNo">1536</span><a name="line.1536"></a>
<span class="sourceLineNo">1537</span>                return -1;<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>            }<a name="line.1538"></a>
<span class="sourceLineNo">1539</span><a name="line.1539"></a>
<span class="sourceLineNo">1540</span>            @Override<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>            public synchronized void reset() {<a name="line.1541"></a>
<span class="sourceLineNo">1542</span>                AbstractIoBuffer.this.reset();<a name="line.1542"></a>
<span class="sourceLineNo">1543</span>            }<a name="line.1543"></a>
<span class="sourceLineNo">1544</span><a name="line.1544"></a>
<span class="sourceLineNo">1545</span>            @Override<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>            public long skip(long n) {<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>                int bytes;<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>                if (n &gt; Integer.MAX_VALUE) {<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>                    bytes = AbstractIoBuffer.this.remaining();<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>                } else {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>                    bytes = Math.min(AbstractIoBuffer.this.remaining(), (int) n);<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>                }<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>                AbstractIoBuffer.this.skip(bytes);<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>                return bytes;<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>            }<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>        };<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>    }<a name="line.1557"></a>
<span class="sourceLineNo">1558</span><a name="line.1558"></a>
<span class="sourceLineNo">1559</span>    /**<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>     * {@inheritDoc}<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>     */<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>    @Override<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>    public OutputStream asOutputStream() {<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>        return new OutputStream() {<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>            @Override<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>            public void write(byte[] b, int off, int len) {<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>                AbstractIoBuffer.this.put(b, off, len);<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>            }<a name="line.1568"></a>
<span class="sourceLineNo">1569</span><a name="line.1569"></a>
<span class="sourceLineNo">1570</span>            @Override<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>            public void write(int b) {<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>                AbstractIoBuffer.this.put((byte) b);<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>            }<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>        };<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>    }<a name="line.1575"></a>
<span class="sourceLineNo">1576</span><a name="line.1576"></a>
<span class="sourceLineNo">1577</span>    /**<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>     * {@inheritDoc}<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>     */<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>    @Override<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>    public String getHexDump() {<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>        return this.getHexDump(Integer.MAX_VALUE);<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
<span class="sourceLineNo">1584</span><a name="line.1584"></a>
<span class="sourceLineNo">1585</span>    /**<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>     * {@inheritDoc}<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>     */<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>    @Override<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>    public String getHexDump(int lengthLimit) {<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>        return IoBufferHexDumper.getHexdump(this, lengthLimit);<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
<span class="sourceLineNo">1592</span><a name="line.1592"></a>
<span class="sourceLineNo">1593</span>    /**<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>     * {@inheritDoc}<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>     */<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>    @Override<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>    public String getString(CharsetDecoder decoder) throws CharacterCodingException {<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>        if (!hasRemaining()) {<a name="line.1598"></a>
<span class="sourceLineNo">1599</span>            return "";<a name="line.1599"></a>
<span class="sourceLineNo">1600</span>        }<a name="line.1600"></a>
<span class="sourceLineNo">1601</span><a name="line.1601"></a>
<span class="sourceLineNo">1602</span>        boolean utf16 = decoder.charset().name().startsWith("UTF-16");<a name="line.1602"></a>
<span class="sourceLineNo">1603</span><a name="line.1603"></a>
<span class="sourceLineNo">1604</span>        int oldPos = position();<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>        int oldLimit = limit();<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>        int end = -1;<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>        int newPos;<a name="line.1607"></a>
<span class="sourceLineNo">1608</span><a name="line.1608"></a>
<span class="sourceLineNo">1609</span>        if (!utf16) {<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>            end = indexOf((byte) 0x00);<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>            if (end &lt; 0) {<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>                newPos = end = oldLimit;<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>            } else {<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>                newPos = end + 1;<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>            }<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>        } else {<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>            int i = oldPos;<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>            for (;;) {<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>                boolean wasZero = get(i) == 0;<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>                i++;<a name="line.1620"></a>
<span class="sourceLineNo">1621</span><a name="line.1621"></a>
<span class="sourceLineNo">1622</span>                if (i &gt;= oldLimit) {<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>                    break;<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>                }<a name="line.1624"></a>
<span class="sourceLineNo">1625</span><a name="line.1625"></a>
<span class="sourceLineNo">1626</span>                if (get(i) != 0) {<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>                    i++;<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>                    if (i &gt;= oldLimit) {<a name="line.1628"></a>
<span class="sourceLineNo">1629</span>                        break;<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>                    }<a name="line.1630"></a>
<span class="sourceLineNo">1631</span><a name="line.1631"></a>
<span class="sourceLineNo">1632</span>                    continue;<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>                }<a name="line.1633"></a>
<span class="sourceLineNo">1634</span><a name="line.1634"></a>
<span class="sourceLineNo">1635</span>                if (wasZero) {<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>                    end = i - 1;<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>                    break;<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>                }<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>            }<a name="line.1639"></a>
<span class="sourceLineNo">1640</span><a name="line.1640"></a>
<span class="sourceLineNo">1641</span>            if (end &lt; 0) {<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>                newPos = end = oldPos + (oldLimit - oldPos &amp; 0xFFFFFFFE);<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>            } else {<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>                if (end + 2 &lt;= oldLimit) {<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>                    newPos = end + 2;<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>                } else {<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>                    newPos = end;<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>                }<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>            }<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>        }<a name="line.1650"></a>
<span class="sourceLineNo">1651</span><a name="line.1651"></a>
<span class="sourceLineNo">1652</span>        if (oldPos == end) {<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>            position(newPos);<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>            return "";<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>        }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span><a name="line.1656"></a>
<span class="sourceLineNo">1657</span>        limit(end);<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>        decoder.reset();<a name="line.1658"></a>
<span class="sourceLineNo">1659</span><a name="line.1659"></a>
<span class="sourceLineNo">1660</span>        int expectedLength = (int) (remaining() * decoder.averageCharsPerByte()) + 1;<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>        CharBuffer out = CharBuffer.allocate(expectedLength);<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>        for (;;) {<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>            CoderResult cr;<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>            if (hasRemaining()) {<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>                cr = decoder.decode(buf(), out, true);<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>            } else {<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>                cr = decoder.flush(out);<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>            }<a name="line.1668"></a>
<span class="sourceLineNo">1669</span><a name="line.1669"></a>
<span class="sourceLineNo">1670</span>            if (cr.isUnderflow()) {<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>                break;<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>            }<a name="line.1672"></a>
<span class="sourceLineNo">1673</span><a name="line.1673"></a>
<span class="sourceLineNo">1674</span>            if (cr.isOverflow()) {<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>                CharBuffer o = CharBuffer.allocate(out.capacity() + expectedLength);<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>                out.flip();<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>                o.put(out);<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>                out = o;<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>                continue;<a name="line.1679"></a>
<span class="sourceLineNo">1680</span>            }<a name="line.1680"></a>
<span class="sourceLineNo">1681</span><a name="line.1681"></a>
<span class="sourceLineNo">1682</span>            if (cr.isError()) {<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>                // Revert the buffer back to the previous state.<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>                limit(oldLimit);<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>                position(oldPos);<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>                cr.throwException();<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>            }<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>        }<a name="line.1688"></a>
<span class="sourceLineNo">1689</span><a name="line.1689"></a>
<span class="sourceLineNo">1690</span>        limit(oldLimit);<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>        position(newPos);<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>        return out.flip().toString();<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
<span class="sourceLineNo">1694</span><a name="line.1694"></a>
<span class="sourceLineNo">1695</span>    /**<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>     * {@inheritDoc}<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>     */<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>    @Override<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>    public String getString(int fieldSize, CharsetDecoder decoder) throws CharacterCodingException {<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        checkFieldSize(fieldSize);<a name="line.1700"></a>
<span class="sourceLineNo">1701</span><a name="line.1701"></a>
<span class="sourceLineNo">1702</span>        if (fieldSize == 0) {<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>            return "";<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
<span class="sourceLineNo">1705</span><a name="line.1705"></a>
<span class="sourceLineNo">1706</span>        if (!hasRemaining()) {<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>            return "";<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>        }<a name="line.1708"></a>
<span class="sourceLineNo">1709</span><a name="line.1709"></a>
<span class="sourceLineNo">1710</span>        boolean utf16 = decoder.charset().name().startsWith("UTF-16");<a name="line.1710"></a>
<span class="sourceLineNo">1711</span><a name="line.1711"></a>
<span class="sourceLineNo">1712</span>        if (utf16 &amp;&amp; (fieldSize &amp; 1) != 0) {<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>            throw new IllegalArgumentException("fieldSize is not even.");<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
<span class="sourceLineNo">1715</span><a name="line.1715"></a>
<span class="sourceLineNo">1716</span>        int oldPos = position();<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>        int oldLimit = limit();<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        int end = oldPos + fieldSize;<a name="line.1718"></a>
<span class="sourceLineNo">1719</span><a name="line.1719"></a>
<span class="sourceLineNo">1720</span>        if (oldLimit &lt; end) {<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>            throw new BufferUnderflowException();<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>        }<a name="line.1722"></a>
<span class="sourceLineNo">1723</span><a name="line.1723"></a>
<span class="sourceLineNo">1724</span>        int i;<a name="line.1724"></a>
<span class="sourceLineNo">1725</span><a name="line.1725"></a>
<span class="sourceLineNo">1726</span>        if (!utf16) {<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>            for (i = oldPos; i &lt; end; i++) {<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>                if (get(i) == 0) {<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>                    break;<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>                }<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>            }<a name="line.1731"></a>
<span class="sourceLineNo">1732</span><a name="line.1732"></a>
<span class="sourceLineNo">1733</span>            if (i == end) {<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>                limit(end);<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>            } else {<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>                limit(i);<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>            }<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>        } else {<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>            for (i = oldPos; i &lt; end; i += 2) {<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>                if (get(i) == 0 &amp;&amp; get(i + 1) == 0) {<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>                    break;<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>                }<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>            }<a name="line.1743"></a>
<span class="sourceLineNo">1744</span><a name="line.1744"></a>
<span class="sourceLineNo">1745</span>            if (i == end) {<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>                limit(end);<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>            } else {<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>                limit(i);<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>            }<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>        }<a name="line.1750"></a>
<span class="sourceLineNo">1751</span><a name="line.1751"></a>
<span class="sourceLineNo">1752</span>        if (!hasRemaining()) {<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>            limit(oldLimit);<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>            position(end);<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>            return "";<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>        }<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>        decoder.reset();<a name="line.1757"></a>
<span class="sourceLineNo">1758</span><a name="line.1758"></a>
<span class="sourceLineNo">1759</span>        int expectedLength = (int) (remaining() * decoder.averageCharsPerByte()) + 1;<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>        CharBuffer out = CharBuffer.allocate(expectedLength);<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>        for (;;) {<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>            CoderResult cr;<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>            if (hasRemaining()) {<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>                cr = decoder.decode(buf(), out, true);<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>            } else {<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>                cr = decoder.flush(out);<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>            }<a name="line.1767"></a>
<span class="sourceLineNo">1768</span><a name="line.1768"></a>
<span class="sourceLineNo">1769</span>            if (cr.isUnderflow()) {<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>                break;<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>            }<a name="line.1771"></a>
<span class="sourceLineNo">1772</span><a name="line.1772"></a>
<span class="sourceLineNo">1773</span>            if (cr.isOverflow()) {<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>                CharBuffer o = CharBuffer.allocate(out.capacity() + expectedLength);<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>                out.flip();<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>                o.put(out);<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>                out = o;<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>                continue;<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>            }<a name="line.1779"></a>
<span class="sourceLineNo">1780</span><a name="line.1780"></a>
<span class="sourceLineNo">1781</span>            if (cr.isError()) {<a name="line.1781"></a>
<span class="sourceLineNo">1782</span>                // Revert the buffer back to the previous state.<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>                limit(oldLimit);<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>                position(oldPos);<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>                cr.throwException();<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>            }<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>        }<a name="line.1787"></a>
<span class="sourceLineNo">1788</span><a name="line.1788"></a>
<span class="sourceLineNo">1789</span>        limit(oldLimit);<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>        position(end);<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>        return out.flip().toString();<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>    }<a name="line.1792"></a>
<span class="sourceLineNo">1793</span><a name="line.1793"></a>
<span class="sourceLineNo">1794</span>    /**<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>     * {@inheritDoc}<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>     */<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>    @Override<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>    public IoBuffer putString(CharSequence val, CharsetEncoder encoder) throws CharacterCodingException {<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>        if (val.length() == 0) {<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>            return this;<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
<span class="sourceLineNo">1802</span><a name="line.1802"></a>
<span class="sourceLineNo">1803</span>        CharBuffer in = CharBuffer.wrap(val);<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>        encoder.reset();<a name="line.1804"></a>
<span class="sourceLineNo">1805</span><a name="line.1805"></a>
<span class="sourceLineNo">1806</span>        int expandedState = 0;<a name="line.1806"></a>
<span class="sourceLineNo">1807</span><a name="line.1807"></a>
<span class="sourceLineNo">1808</span>        for (;;) {<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>            CoderResult cr;<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>            if (in.hasRemaining()) {<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>                cr = encoder.encode(in, buf(), true);<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>            } else {<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>                cr = encoder.flush(buf());<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>            }<a name="line.1814"></a>
<span class="sourceLineNo">1815</span><a name="line.1815"></a>
<span class="sourceLineNo">1816</span>            if (cr.isUnderflow()) {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>                break;<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>            }<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>            if (cr.isOverflow()) {<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>                if (isAutoExpand()) {<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>                    switch (expandedState) {<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>                    case 0:<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>                        autoExpand((int) Math.ceil(in.remaining() * encoder.averageBytesPerChar()));<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>                        expandedState++;<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>                        break;<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>                    case 1:<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>                        autoExpand((int) Math.ceil(in.remaining() * encoder.maxBytesPerChar()));<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>                        expandedState++;<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>                        break;<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>                    default:<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>                        throw new RuntimeException("Expanded by "<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>                                + (int) Math.ceil(in.remaining() * encoder.maxBytesPerChar())<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>                                + " but that wasn't enough for '" + val + "'");<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>                    }<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>                    continue;<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>                }<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>            } else {<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>                expandedState = 0;<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>            }<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>            cr.throwException();<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>        }<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>        return this;<a name="line.1842"></a>
<span class="sourceLineNo">1843</span>    }<a name="line.1843"></a>
<span class="sourceLineNo">1844</span><a name="line.1844"></a>
<span class="sourceLineNo">1845</span>    /**<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>     * {@inheritDoc}<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>     */<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>    @Override<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>    public IoBuffer putString(CharSequence val, int fieldSize, CharsetEncoder encoder) throws CharacterCodingException {<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>        checkFieldSize(fieldSize);<a name="line.1850"></a>
<span class="sourceLineNo">1851</span><a name="line.1851"></a>
<span class="sourceLineNo">1852</span>        if (fieldSize == 0) {<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>            return this;<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>        }<a name="line.1854"></a>
<span class="sourceLineNo">1855</span><a name="line.1855"></a>
<span class="sourceLineNo">1856</span>        autoExpand(fieldSize);<a name="line.1856"></a>
<span class="sourceLineNo">1857</span><a name="line.1857"></a>
<span class="sourceLineNo">1858</span>        boolean utf16 = encoder.charset().name().startsWith("UTF-16");<a name="line.1858"></a>
<span class="sourceLineNo">1859</span><a name="line.1859"></a>
<span class="sourceLineNo">1860</span>        if (utf16 &amp;&amp; (fieldSize &amp; 1) != 0) {<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>            throw new IllegalArgumentException("fieldSize is not even.");<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>        }<a name="line.1862"></a>
<span class="sourceLineNo">1863</span><a name="line.1863"></a>
<span class="sourceLineNo">1864</span>        int oldLimit = limit();<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>        int end = position() + fieldSize;<a name="line.1865"></a>
<span class="sourceLineNo">1866</span><a name="line.1866"></a>
<span class="sourceLineNo">1867</span>        if (oldLimit &lt; end) {<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>            throw new BufferOverflowException();<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>        }<a name="line.1869"></a>
<span class="sourceLineNo">1870</span><a name="line.1870"></a>
<span class="sourceLineNo">1871</span>        if (val.length() == 0) {<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>            if (!utf16) {<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>                put((byte) 0x00);<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>            } else {<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>                put((byte) 0x00);<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>                put((byte) 0x00);<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>            }<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>            position(end);<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>            return this;<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>        }<a name="line.1880"></a>
<span class="sourceLineNo">1881</span><a name="line.1881"></a>
<span class="sourceLineNo">1882</span>        CharBuffer in = CharBuffer.wrap(val);<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        limit(end);<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>        encoder.reset();<a name="line.1884"></a>
<span class="sourceLineNo">1885</span><a name="line.1885"></a>
<span class="sourceLineNo">1886</span>        for (;;) {<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>            CoderResult cr;<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>            if (in.hasRemaining()) {<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>                cr = encoder.encode(in, buf(), true);<a name="line.1889"></a>
<span class="sourceLineNo">1890</span>            } else {<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>                cr = encoder.flush(buf());<a name="line.1891"></a>
<span class="sourceLineNo">1892</span>            }<a name="line.1892"></a>
<span class="sourceLineNo">1893</span><a name="line.1893"></a>
<span class="sourceLineNo">1894</span>            if (cr.isUnderflow() || cr.isOverflow()) {<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>                break;<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>            }<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>            cr.throwException();<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>        }<a name="line.1898"></a>
<span class="sourceLineNo">1899</span><a name="line.1899"></a>
<span class="sourceLineNo">1900</span>        limit(oldLimit);<a name="line.1900"></a>
<span class="sourceLineNo">1901</span><a name="line.1901"></a>
<span class="sourceLineNo">1902</span>        if (position() &lt; end) {<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>            if (!utf16) {<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>                put((byte) 0x00);<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>            } else {<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>                put((byte) 0x00);<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>                put((byte) 0x00);<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>            }<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>        }<a name="line.1909"></a>
<span class="sourceLineNo">1910</span><a name="line.1910"></a>
<span class="sourceLineNo">1911</span>        position(end);<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>        return this;<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>    }<a name="line.1913"></a>
<span class="sourceLineNo">1914</span><a name="line.1914"></a>
<span class="sourceLineNo">1915</span>    /**<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>     * {@inheritDoc}<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>     */<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>    @Override<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>    public String getPrefixedString(CharsetDecoder decoder) throws CharacterCodingException {<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>        return getPrefixedString(2, decoder);<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>    }<a name="line.1921"></a>
<span class="sourceLineNo">1922</span><a name="line.1922"></a>
<span class="sourceLineNo">1923</span>    /**<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>     * Reads a string which has a length field before the actual<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>     * encoded string, using the specified &lt;code&gt;decoder&lt;/code&gt; and returns it.<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>     *<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>     * @param prefixLength the length of the length field (1, 2, or 4)<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>     * @param decoder the decoder to use for decoding the string<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>     * @return the prefixed string<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>     * @throws CharacterCodingException when decoding fails<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>     * @throws BufferUnderflowException when there is not enough data available<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>     */<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>    @Override<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>    public String getPrefixedString(int prefixLength, CharsetDecoder decoder) throws CharacterCodingException {<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>        if (!prefixedDataAvailable(prefixLength)) {<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>            throw new BufferUnderflowException();<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>        }<a name="line.1937"></a>
<span class="sourceLineNo">1938</span><a name="line.1938"></a>
<span class="sourceLineNo">1939</span>        int fieldSize = 0;<a name="line.1939"></a>
<span class="sourceLineNo">1940</span><a name="line.1940"></a>
<span class="sourceLineNo">1941</span>        switch (prefixLength) {<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>        case 1:<a name="line.1942"></a>
<span class="sourceLineNo">1943</span>            fieldSize = getUnsigned();<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>            break;<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>        case 2:<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>            fieldSize = getUnsignedShort();<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>            break;<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>        case 4:<a name="line.1948"></a>
<span class="sourceLineNo">1949</span>            fieldSize = getInt();<a name="line.1949"></a>
<span class="sourceLineNo">1950</span>            break;<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>        }<a name="line.1951"></a>
<span class="sourceLineNo">1952</span><a name="line.1952"></a>
<span class="sourceLineNo">1953</span>        if (fieldSize == 0) {<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>            return "";<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>        }<a name="line.1955"></a>
<span class="sourceLineNo">1956</span><a name="line.1956"></a>
<span class="sourceLineNo">1957</span>        boolean utf16 = decoder.charset().name().startsWith("UTF-16");<a name="line.1957"></a>
<span class="sourceLineNo">1958</span><a name="line.1958"></a>
<span class="sourceLineNo">1959</span>        if (utf16 &amp;&amp; (fieldSize &amp; 1) != 0) {<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>            throw new BufferDataException("fieldSize is not even for a UTF-16 string.");<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>        }<a name="line.1961"></a>
<span class="sourceLineNo">1962</span><a name="line.1962"></a>
<span class="sourceLineNo">1963</span>        int oldLimit = limit();<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>        int end = position() + fieldSize;<a name="line.1964"></a>
<span class="sourceLineNo">1965</span><a name="line.1965"></a>
<span class="sourceLineNo">1966</span>        if (oldLimit &lt; end) {<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>            throw new BufferUnderflowException();<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>        }<a name="line.1968"></a>
<span class="sourceLineNo">1969</span><a name="line.1969"></a>
<span class="sourceLineNo">1970</span>        limit(end);<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>        decoder.reset();<a name="line.1971"></a>
<span class="sourceLineNo">1972</span><a name="line.1972"></a>
<span class="sourceLineNo">1973</span>        int expectedLength = (int) (remaining() * decoder.averageCharsPerByte()) + 1;<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>        CharBuffer out = CharBuffer.allocate(expectedLength);<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>        for (;;) {<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>            CoderResult cr;<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>            if (hasRemaining()) {<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>                cr = decoder.decode(buf(), out, true);<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>            } else {<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>                cr = decoder.flush(out);<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>            }<a name="line.1981"></a>
<span class="sourceLineNo">1982</span><a name="line.1982"></a>
<span class="sourceLineNo">1983</span>            if (cr.isUnderflow()) {<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>                break;<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>            }<a name="line.1985"></a>
<span class="sourceLineNo">1986</span><a name="line.1986"></a>
<span class="sourceLineNo">1987</span>            if (cr.isOverflow()) {<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>                CharBuffer o = CharBuffer.allocate(out.capacity() + expectedLength);<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>                out.flip();<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>                o.put(out);<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>                out = o;<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>                continue;<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>            }<a name="line.1993"></a>
<span class="sourceLineNo">1994</span><a name="line.1994"></a>
<span class="sourceLineNo">1995</span>            cr.throwException();<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>        }<a name="line.1996"></a>
<span class="sourceLineNo">1997</span><a name="line.1997"></a>
<span class="sourceLineNo">1998</span>        limit(oldLimit);<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>        position(end);<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>        return out.flip().toString();<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>    }<a name="line.2001"></a>
<span class="sourceLineNo">2002</span><a name="line.2002"></a>
<span class="sourceLineNo">2003</span>    /**<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>     * {@inheritDoc}<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>     */<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>    @Override<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>    public IoBuffer putPrefixedString(CharSequence in, CharsetEncoder encoder) throws CharacterCodingException {<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>        return putPrefixedString(in, 2, 0, encoder);<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
<span class="sourceLineNo">2010</span><a name="line.2010"></a>
<span class="sourceLineNo">2011</span>    /**<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>     * {@inheritDoc}<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>     */<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>    @Override<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>    public IoBuffer putPrefixedString(CharSequence in, int prefixLength, CharsetEncoder encoder)<a name="line.2015"></a>
<span class="sourceLineNo">2016</span>            throws CharacterCodingException {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>        return putPrefixedString(in, prefixLength, 0, encoder);<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
<span class="sourceLineNo">2019</span><a name="line.2019"></a>
<span class="sourceLineNo">2020</span>    /**<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>     * {@inheritDoc}<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>     */<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>    @Override<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>    public IoBuffer putPrefixedString(CharSequence in, int prefixLength, int padding, CharsetEncoder encoder)<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>            throws CharacterCodingException {<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>        return putPrefixedString(in, prefixLength, padding, (byte) 0, encoder);<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>    }<a name="line.2027"></a>
<span class="sourceLineNo">2028</span><a name="line.2028"></a>
<span class="sourceLineNo">2029</span>    /**<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>     * {@inheritDoc}<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>     */<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>    @Override<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>    public IoBuffer putPrefixedString(CharSequence val, int prefixLength, int padding, byte padValue,<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>            CharsetEncoder encoder) throws CharacterCodingException {<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>        int maxLength;<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>        switch (prefixLength) {<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>        case 1:<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>            maxLength = 255;<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>            break;<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>        case 2:<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>            maxLength = 65535;<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>            break;<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>        case 4:<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>            maxLength = Integer.MAX_VALUE;<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>            break;<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>        default:<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>            throw new IllegalArgumentException("prefixLength: " + prefixLength);<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>        }<a name="line.2048"></a>
<span class="sourceLineNo">2049</span><a name="line.2049"></a>
<span class="sourceLineNo">2050</span>        if (val.length() &gt; maxLength) {<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>            throw new IllegalArgumentException("The specified string is too long.");<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>        }<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>        if (val.length() == 0) {<a name="line.2053"></a>
<span class="sourceLineNo">2054</span>            switch (prefixLength) {<a name="line.2054"></a>
<span class="sourceLineNo">2055</span>            case 1:<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>                put((byte) 0);<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>                break;<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>            case 2:<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>                putShort((short) 0);<a name="line.2059"></a>
<span class="sourceLineNo">2060</span>                break;<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>            case 4:<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>                putInt(0);<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>                break;<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>            }<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>            return this;<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>        }<a name="line.2066"></a>
<span class="sourceLineNo">2067</span><a name="line.2067"></a>
<span class="sourceLineNo">2068</span>        int padMask;<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>        switch (padding) {<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>        case 0:<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>        case 1:<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>            padMask = 0;<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>            break;<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>        case 2:<a name="line.2074"></a>
<span class="sourceLineNo">2075</span>            padMask = 1;<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>            break;<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>        case 4:<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>            padMask = 3;<a name="line.2078"></a>
<span class="sourceLineNo">2079</span>            break;<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>        default:<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>            throw new IllegalArgumentException("padding: " + padding);<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>        }<a name="line.2082"></a>
<span class="sourceLineNo">2083</span><a name="line.2083"></a>
<span class="sourceLineNo">2084</span>        CharBuffer in = CharBuffer.wrap(val);<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>        skip(prefixLength); // make a room for the length field<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>        int oldPos = position();<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>        encoder.reset();<a name="line.2087"></a>
<span class="sourceLineNo">2088</span><a name="line.2088"></a>
<span class="sourceLineNo">2089</span>        int expandedState = 0;<a name="line.2089"></a>
<span class="sourceLineNo">2090</span><a name="line.2090"></a>
<span class="sourceLineNo">2091</span>        for (;;) {<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>            CoderResult cr;<a name="line.2092"></a>
<span class="sourceLineNo">2093</span>            if (in.hasRemaining()) {<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>                cr = encoder.encode(in, buf(), true);<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>            } else {<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>                cr = encoder.flush(buf());<a name="line.2096"></a>
<span class="sourceLineNo">2097</span>            }<a name="line.2097"></a>
<span class="sourceLineNo">2098</span><a name="line.2098"></a>
<span class="sourceLineNo">2099</span>            if (position() - oldPos &gt; maxLength) {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>                throw new IllegalArgumentException("The specified string is too long.");<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>            }<a name="line.2101"></a>
<span class="sourceLineNo">2102</span><a name="line.2102"></a>
<span class="sourceLineNo">2103</span>            if (cr.isUnderflow()) {<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>                break;<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>            }<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>            if (cr.isOverflow()) {<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>                if (isAutoExpand()) {<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>                    switch (expandedState) {<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>                    case 0:<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>                        autoExpand((int) Math.ceil(in.remaining() * encoder.averageBytesPerChar()));<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>                        expandedState++;<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>                        break;<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>                    case 1:<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>                        autoExpand((int) Math.ceil(in.remaining() * encoder.maxBytesPerChar()));<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>                        expandedState++;<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>                        break;<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>                    default:<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>                        throw new RuntimeException("Expanded by "<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>                                + (int) Math.ceil(in.remaining() * encoder.maxBytesPerChar())<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>                                + " but that wasn't enough for '" + val + "'");<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>                    }<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>                    continue;<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>                }<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>            } else {<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>                expandedState = 0;<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>            }<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>            cr.throwException();<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>        }<a name="line.2128"></a>
<span class="sourceLineNo">2129</span><a name="line.2129"></a>
<span class="sourceLineNo">2130</span>        // Write the length field<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>        fill(padValue, padding - (position() - oldPos &amp; padMask));<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>        int length = position() - oldPos;<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>        switch (prefixLength) {<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>        case 1:<a name="line.2134"></a>
<span class="sourceLineNo">2135</span>            put(oldPos - 1, (byte) length);<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>            break;<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>        case 2:<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>            putShort(oldPos - 2, (short) length);<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>            break;<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>        case 4:<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>            putInt(oldPos - 4, length);<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>            break;<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>        }<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>        return this;<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>    }<a name="line.2145"></a>
<span class="sourceLineNo">2146</span><a name="line.2146"></a>
<span class="sourceLineNo">2147</span>    /**<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>     * {@inheritDoc}<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>     */<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>    @Override<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>    public Object getObject() throws ClassNotFoundException {<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>        return getObject(Thread.currentThread().getContextClassLoader());<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>    }<a name="line.2153"></a>
<span class="sourceLineNo">2154</span><a name="line.2154"></a>
<span class="sourceLineNo">2155</span>    /**<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>     * {@inheritDoc}<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>     */<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>    @Override<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>    public Object getObject(final ClassLoader classLoader) throws ClassNotFoundException {<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>        if (!prefixedDataAvailable(4)) {<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>            throw new BufferUnderflowException();<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
<span class="sourceLineNo">2163</span><a name="line.2163"></a>
<span class="sourceLineNo">2164</span>        int length = getInt();<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>        if (length &lt;= 4) {<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>            throw new BufferDataException("Object length should be greater than 4: " + length);<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>        }<a name="line.2167"></a>
<span class="sourceLineNo">2168</span><a name="line.2168"></a>
<span class="sourceLineNo">2169</span>        int oldLimit = limit();<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>        limit(position() + length);<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>        ObjectInputStream in = null;<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>        <a name="line.2172"></a>
<span class="sourceLineNo">2173</span>        try {<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>            in = new ObjectInputStream(asInputStream()) {<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>                @Override<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>                protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {<a name="line.2176"></a>
<span class="sourceLineNo">2177</span>                    int type = read();<a name="line.2177"></a>
<span class="sourceLineNo">2178</span>                    if (type &lt; 0) {<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>                        throw new EOFException();<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>                    }<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>                    switch (type) {<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>                    case 0: // NON-Serializable class or Primitive types<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>                        return super.readClassDescriptor();<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>                    case 1: // Serializable class<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>                        String className = readUTF();<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>                        Class&lt;?&gt; clazz = Class.forName(className, true, classLoader);<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>                        return ObjectStreamClass.lookup(clazz);<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>                    default:<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>                        throw new StreamCorruptedException("Unexpected class descriptor type: " + type);<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>                    }<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>                }<a name="line.2191"></a>
<span class="sourceLineNo">2192</span><a name="line.2192"></a>
<span class="sourceLineNo">2193</span>                @Override<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>                protected Class&lt;?&gt; resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>                    Class&lt;?&gt; clazz = desc.forClass();<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>                    <a name="line.2196"></a>
<span class="sourceLineNo">2197</span>                    if (clazz == null) {<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>                        String name = desc.getName();<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>                        try {<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>                            return Class.forName(name, false, classLoader);<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>                        } catch (ClassNotFoundException ex) {<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>                            return super.resolveClass(desc);<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>                        }<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>                    } else {<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>                        return clazz;<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>                    }<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>                }<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>            };<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>            return in.readObject();<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>        } catch (IOException e) {<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>            throw new BufferDataException(e);<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>        } finally {<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>            try {<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>                if (in != null) {<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>                    in.close();<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>                }<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>            } catch (IOException ioe) {<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>                // Nothing to do<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>            }<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>            <a name="line.2220"></a>
<span class="sourceLineNo">2221</span>            limit(oldLimit);<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>        }<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>    }<a name="line.2223"></a>
<span class="sourceLineNo">2224</span><a name="line.2224"></a>
<span class="sourceLineNo">2225</span>    /**<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>     * {@inheritDoc}<a name="line.2226"></a>
<span class="sourceLineNo">2227</span>     */<a name="line.2227"></a>
<span class="sourceLineNo">2228</span>    @Override<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>    public IoBuffer putObject(Object o) {<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>        int oldPos = position();<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>        skip(4); // Make a room for the length field.<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>        ObjectOutputStream out = null;<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>        <a name="line.2233"></a>
<span class="sourceLineNo">2234</span>        try {<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>            out = new ObjectOutputStream(asOutputStream()) {<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>                @Override<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>                protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException {<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>                    Class&lt;?&gt; clazz = desc.forClass();<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>                    <a name="line.2239"></a>
<span class="sourceLineNo">2240</span>                    if (clazz.isArray() || clazz.isPrimitive() || !Serializable.class.isAssignableFrom(clazz)) {<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>                        write(0);<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>                        super.writeClassDescriptor(desc); <a name="line.2242"></a>
<span class="sourceLineNo">2243</span>                    } else {<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>                        // Serializable class<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>                        write(1);<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>                        writeUTF(desc.getName());                            <a name="line.2246"></a>
<span class="sourceLineNo">2247</span>                    }<a name="line.2247"></a>
<span class="sourceLineNo">2248</span>                }<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>            };<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>            out.writeObject(o);<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>            out.flush();<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>        } catch (IOException e) {<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>            throw new BufferDataException(e);<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>        } finally {<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>            try {<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>                if (out != null) {<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>                    out.close();<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>                }<a name="line.2258"></a>
<span class="sourceLineNo">2259</span>            } catch (IOException ioe) {<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>                // Nothing to do<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>            }<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>        }<a name="line.2262"></a>
<span class="sourceLineNo">2263</span><a name="line.2263"></a>
<span class="sourceLineNo">2264</span>        // Fill the length field<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>        int newPos = position();<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>        position(oldPos);<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>        putInt(newPos - oldPos - 4);<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>        position(newPos);<a name="line.2268"></a>
<span class="sourceLineNo">2269</span>        return this;<a name="line.2269"></a>
<span class="sourceLineNo">2270</span>    }<a name="line.2270"></a>
<span class="sourceLineNo">2271</span><a name="line.2271"></a>
<span class="sourceLineNo">2272</span>    /**<a name="line.2272"></a>
<span class="sourceLineNo">2273</span>     * {@inheritDoc}<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>     */<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>    @Override<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>    public boolean prefixedDataAvailable(int prefixLength) {<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>        return prefixedDataAvailable(prefixLength, Integer.MAX_VALUE);<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
<span class="sourceLineNo">2279</span><a name="line.2279"></a>
<span class="sourceLineNo">2280</span>    /**<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>     * {@inheritDoc}<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>     */<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>    @Override<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>    public boolean prefixedDataAvailable(int prefixLength, int maxDataLength) {<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>        if (remaining() &lt; prefixLength) {<a name="line.2285"></a>
<span class="sourceLineNo">2286</span>            return false;<a name="line.2286"></a>
<span class="sourceLineNo">2287</span>        }<a name="line.2287"></a>
<span class="sourceLineNo">2288</span><a name="line.2288"></a>
<span class="sourceLineNo">2289</span>        int dataLength;<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>        switch (prefixLength) {<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>        case 1:<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>            dataLength = getUnsigned(position());<a name="line.2292"></a>
<span class="sourceLineNo">2293</span>            break;<a name="line.2293"></a>
<span class="sourceLineNo">2294</span>        case 2:<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>            dataLength = getUnsignedShort(position());<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>            break;<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>        case 4:<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>            dataLength = getInt(position());<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>            break;<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>        default:<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>            throw new IllegalArgumentException("prefixLength: " + prefixLength);<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>        }<a name="line.2302"></a>
<span class="sourceLineNo">2303</span><a name="line.2303"></a>
<span class="sourceLineNo">2304</span>        if (dataLength &lt; 0 || dataLength &gt; maxDataLength) {<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>            throw new BufferDataException("dataLength: " + dataLength);<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>        }<a name="line.2306"></a>
<span class="sourceLineNo">2307</span><a name="line.2307"></a>
<span class="sourceLineNo">2308</span>        return remaining() - prefixLength &gt;= dataLength;<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>    }<a name="line.2309"></a>
<span class="sourceLineNo">2310</span><a name="line.2310"></a>
<span class="sourceLineNo">2311</span>    /**<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>     * {@inheritDoc}<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>     */<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>    @Override<a name="line.2314"></a>
<span class="sourceLineNo">2315</span>    public int indexOf(byte b) {<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>        if (hasArray()) {<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>            int arrayOffset = arrayOffset();<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>            int beginPos = arrayOffset + position();<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>            int limit = arrayOffset + limit();<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>            byte[] array = array();<a name="line.2320"></a>
<span class="sourceLineNo">2321</span><a name="line.2321"></a>
<span class="sourceLineNo">2322</span>            for (int i = beginPos; i &lt; limit; i++) {<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>                if (array[i] == b) {<a name="line.2323"></a>
<span class="sourceLineNo">2324</span>                    return i - arrayOffset;<a name="line.2324"></a>
<span class="sourceLineNo">2325</span>                }<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>            }<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>        } else {<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>            int beginPos = position();<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>            int limit = limit();<a name="line.2329"></a>
<span class="sourceLineNo">2330</span><a name="line.2330"></a>
<span class="sourceLineNo">2331</span>            for (int i = beginPos; i &lt; limit; i++) {<a name="line.2331"></a>
<span class="sourceLineNo">2332</span>                if (get(i) == b) {<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>                    return i;<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>                }<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>            }<a name="line.2335"></a>
<span class="sourceLineNo">2336</span>        }<a name="line.2336"></a>
<span class="sourceLineNo">2337</span><a name="line.2337"></a>
<span class="sourceLineNo">2338</span>        return -1;<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>    }<a name="line.2339"></a>
<span class="sourceLineNo">2340</span><a name="line.2340"></a>
<span class="sourceLineNo">2341</span>    /**<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>     * {@inheritDoc}<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>     */<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>    @Override<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>    public IoBuffer skip(int size) {<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>        autoExpand(size);<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>        return position(position() + size);<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>    }<a name="line.2348"></a>
<span class="sourceLineNo">2349</span><a name="line.2349"></a>
<span class="sourceLineNo">2350</span>    /**<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>     * {@inheritDoc}<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>     */<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>    @Override<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>    public IoBuffer fill(byte value, int size) {<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>        autoExpand(size);<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>        int q = size &gt;&gt;&gt; 3;<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>            int r = size &amp; 7;<a name="line.2357"></a>
<span class="sourceLineNo">2358</span><a name="line.2358"></a>
<span class="sourceLineNo">2359</span>            if (q &gt; 0) {<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>                int intValue = value &amp; 0x000000FF | ( value &lt;&lt; 8 ) &amp; 0x0000FF00 | ( value &lt;&lt; 16 ) &amp; 0x00FF0000 | value &lt;&lt; 24;<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>                long longValue = intValue &amp; 0x00000000FFFFFFFFL | (long)intValue &lt;&lt; 32;<a name="line.2361"></a>
<span class="sourceLineNo">2362</span><a name="line.2362"></a>
<span class="sourceLineNo">2363</span>                for (int i = q; i &gt; 0; i--) {<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>                    putLong(longValue);<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>                }<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>            }<a name="line.2366"></a>
<span class="sourceLineNo">2367</span><a name="line.2367"></a>
<span class="sourceLineNo">2368</span>            q = r &gt;&gt;&gt; 2;<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>                r = r &amp; 3;<a name="line.2369"></a>
<span class="sourceLineNo">2370</span><a name="line.2370"></a>
<span class="sourceLineNo">2371</span>                if (q &gt; 0) {<a name="line.2371"></a>
<span class="sourceLineNo">2372</span>                    int intValue = value &amp; 0x000000FF | ( value &lt;&lt; 8 ) &amp; 0x0000FF00 | ( value &lt;&lt; 16 ) &amp; 0x00FF0000 | value &lt;&lt; 24;<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>                    putInt(intValue);<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>                }<a name="line.2374"></a>
<span class="sourceLineNo">2375</span><a name="line.2375"></a>
<span class="sourceLineNo">2376</span>                q = r &gt;&gt; 1;<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>                    r = r &amp; 1;<a name="line.2377"></a>
<span class="sourceLineNo">2378</span><a name="line.2378"></a>
<span class="sourceLineNo">2379</span>                    if (q &gt; 0) {<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>                        short shortValue = (short) (value &amp; 0x000FF | value &lt;&lt; 8);<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>                        putShort(shortValue);<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>                    }<a name="line.2382"></a>
<span class="sourceLineNo">2383</span><a name="line.2383"></a>
<span class="sourceLineNo">2384</span>                    if (r &gt; 0) {<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>                        put(value);<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>                    }<a name="line.2386"></a>
<span class="sourceLineNo">2387</span><a name="line.2387"></a>
<span class="sourceLineNo">2388</span>                    return this;<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>    }<a name="line.2389"></a>
<span class="sourceLineNo">2390</span><a name="line.2390"></a>
<span class="sourceLineNo">2391</span>    /**<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>     * {@inheritDoc}<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>     */<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>    @Override<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>    public IoBuffer fillAndReset(byte value, int size) {<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>        autoExpand(size);<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>        int pos = position();<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>        try {<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>            fill(value, size);<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>        } finally {<a name="line.2400"></a>
<span class="sourceLineNo">2401</span>            position(pos);<a name="line.2401"></a>
<span class="sourceLineNo">2402</span>        }<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>        return this;<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>    }<a name="line.2404"></a>
<span class="sourceLineNo">2405</span><a name="line.2405"></a>
<span class="sourceLineNo">2406</span>    /**<a name="line.2406"></a>
<span class="sourceLineNo">2407</span>     * {@inheritDoc}<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>     */<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>    @Override<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>    public IoBuffer fill(int size) {<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>        autoExpand(size);<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>        int q = size &gt;&gt;&gt; 3;<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>                    int r = size &amp; 7;<a name="line.2413"></a>
<span class="sourceLineNo">2414</span><a name="line.2414"></a>
<span class="sourceLineNo">2415</span>                    for (int i = q; i &gt; 0; i--) {<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>                        putLong(0L);<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>                    }<a name="line.2417"></a>
<span class="sourceLineNo">2418</span><a name="line.2418"></a>
<span class="sourceLineNo">2419</span>                    q = r &gt;&gt;&gt; 2;<a name="line.2419"></a>
<span class="sourceLineNo">2420</span>                r = r &amp; 3;<a name="line.2420"></a>
<span class="sourceLineNo">2421</span><a name="line.2421"></a>
<span class="sourceLineNo">2422</span>                if (q &gt; 0) {<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>                    putInt(0);<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>                }<a name="line.2424"></a>
<span class="sourceLineNo">2425</span><a name="line.2425"></a>
<span class="sourceLineNo">2426</span>                q = r &gt;&gt; 1;<a name="line.2426"></a>
<span class="sourceLineNo">2427</span>            r = r &amp; 1;<a name="line.2427"></a>
<span class="sourceLineNo">2428</span><a name="line.2428"></a>
<span class="sourceLineNo">2429</span>            if (q &gt; 0) {<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>                putShort((short) 0);<a name="line.2430"></a>
<span class="sourceLineNo">2431</span>            }<a name="line.2431"></a>
<span class="sourceLineNo">2432</span><a name="line.2432"></a>
<span class="sourceLineNo">2433</span>            if (r &gt; 0) {<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>                put((byte) 0);<a name="line.2434"></a>
<span class="sourceLineNo">2435</span>            }<a name="line.2435"></a>
<span class="sourceLineNo">2436</span><a name="line.2436"></a>
<span class="sourceLineNo">2437</span>            return this;<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>    }<a name="line.2438"></a>
<span class="sourceLineNo">2439</span><a name="line.2439"></a>
<span class="sourceLineNo">2440</span>    /**<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>     * {@inheritDoc}<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>     */<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>    @Override<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>    public IoBuffer fillAndReset(int size) {<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>        autoExpand(size);<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>        int pos = position();<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>        try {<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>            fill(size);<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>        } finally {<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>            position(pos);<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>        }<a name="line.2451"></a>
<span class="sourceLineNo">2452</span><a name="line.2452"></a>
<span class="sourceLineNo">2453</span>        return this;<a name="line.2453"></a>
<span class="sourceLineNo">2454</span>    }<a name="line.2454"></a>
<span class="sourceLineNo">2455</span><a name="line.2455"></a>
<span class="sourceLineNo">2456</span>    /**<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>     * {@inheritDoc}<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>     */<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>    @Override<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnum(Class&lt;E&gt; enumClass) {<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>        return toEnum(enumClass, getUnsigned());<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>    }<a name="line.2462"></a>
<span class="sourceLineNo">2463</span><a name="line.2463"></a>
<span class="sourceLineNo">2464</span>    /**<a name="line.2464"></a>
<span class="sourceLineNo">2465</span>     * {@inheritDoc}<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>     */<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>    @Override<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnum(int index, Class&lt;E&gt; enumClass) {<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>        return toEnum(enumClass, getUnsigned(index));<a name="line.2469"></a>
<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
<span class="sourceLineNo">2471</span><a name="line.2471"></a>
<span class="sourceLineNo">2472</span>    /**<a name="line.2472"></a>
<span class="sourceLineNo">2473</span>     * {@inheritDoc}<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>     */<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>    @Override<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnumShort(Class&lt;E&gt; enumClass) {<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>        return toEnum(enumClass, getUnsignedShort());<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>    }<a name="line.2478"></a>
<span class="sourceLineNo">2479</span><a name="line.2479"></a>
<span class="sourceLineNo">2480</span>    /**<a name="line.2480"></a>
<span class="sourceLineNo">2481</span>     * {@inheritDoc}<a name="line.2481"></a>
<span class="sourceLineNo">2482</span>     */<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>    @Override<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnumShort(int index, Class&lt;E&gt; enumClass) {<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>        return toEnum(enumClass, getUnsignedShort(index));<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>    }<a name="line.2486"></a>
<span class="sourceLineNo">2487</span><a name="line.2487"></a>
<span class="sourceLineNo">2488</span>    /**<a name="line.2488"></a>
<span class="sourceLineNo">2489</span>     * {@inheritDoc}<a name="line.2489"></a>
<span class="sourceLineNo">2490</span>     */<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>    @Override<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnumInt(Class&lt;E&gt; enumClass) {<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>        return toEnum(enumClass, getInt());<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>    }<a name="line.2494"></a>
<span class="sourceLineNo">2495</span><a name="line.2495"></a>
<span class="sourceLineNo">2496</span>    /**<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>     * {@inheritDoc}<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>     */<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>    public &lt;E extends Enum&lt;E&gt;&gt; E getEnumInt(int index, Class&lt;E&gt; enumClass) {<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>        return toEnum(enumClass, getInt(index));<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>    }<a name="line.2501"></a>
<span class="sourceLineNo">2502</span><a name="line.2502"></a>
<span class="sourceLineNo">2503</span>    /**<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>     * {@inheritDoc}<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>     */<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>    @Override<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>    public IoBuffer putEnum(Enum&lt;?&gt; e) {<a name="line.2507"></a>
<span class="sourceLineNo">2508</span>        if (e.ordinal() &gt; BYTE_MASK) {<a name="line.2508"></a>
<span class="sourceLineNo">2509</span>            throw new IllegalArgumentException(enumConversionErrorMessage(e, "byte"));<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>        }<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>        return put((byte) e.ordinal());<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>    }<a name="line.2512"></a>
<span class="sourceLineNo">2513</span><a name="line.2513"></a>
<span class="sourceLineNo">2514</span>    /**<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>     * {@inheritDoc}<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>     */<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>    @Override<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>    public IoBuffer putEnum(int index, Enum&lt;?&gt; e) {<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>        if (e.ordinal() &gt; BYTE_MASK) {<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>            throw new IllegalArgumentException(enumConversionErrorMessage(e, "byte"));<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>        }<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>        return put(index, (byte) e.ordinal());<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
<span class="sourceLineNo">2524</span><a name="line.2524"></a>
<span class="sourceLineNo">2525</span>    /**<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>     * {@inheritDoc}<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>     */<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>    @Override<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>    public IoBuffer putEnumShort(Enum&lt;?&gt; e) {<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>        if (e.ordinal() &gt; SHORT_MASK) {<a name="line.2530"></a>
<span class="sourceLineNo">2531</span>            throw new IllegalArgumentException(enumConversionErrorMessage(e, "short"));<a name="line.2531"></a>
<span class="sourceLineNo">2532</span>        }<a name="line.2532"></a>
<span class="sourceLineNo">2533</span>        return putShort((short) e.ordinal());<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
<span class="sourceLineNo">2535</span><a name="line.2535"></a>
<span class="sourceLineNo">2536</span>    /**<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>     * {@inheritDoc}<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>     */<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>    @Override<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>    public IoBuffer putEnumShort(int index, Enum&lt;?&gt; e) {<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>        if (e.ordinal() &gt; SHORT_MASK) {<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>            throw new IllegalArgumentException(enumConversionErrorMessage(e, "short"));<a name="line.2542"></a>
<span class="sourceLineNo">2543</span>        }<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>        return putShort(index, (short) e.ordinal());<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>    }<a name="line.2545"></a>
<span class="sourceLineNo">2546</span><a name="line.2546"></a>
<span class="sourceLineNo">2547</span>    /**<a name="line.2547"></a>
<span class="sourceLineNo">2548</span>     * {@inheritDoc}<a name="line.2548"></a>
<span class="sourceLineNo">2549</span>     */<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>    @Override<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>    public IoBuffer putEnumInt(Enum&lt;?&gt; e) {<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>        return putInt(e.ordinal());<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>    }<a name="line.2553"></a>
<span class="sourceLineNo">2554</span><a name="line.2554"></a>
<span class="sourceLineNo">2555</span>    /**<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>     * {@inheritDoc}<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>     */<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>    @Override<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>    public IoBuffer putEnumInt(int index, Enum&lt;?&gt; e) {<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>        return putInt(index, e.ordinal());<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>    }<a name="line.2561"></a>
<span class="sourceLineNo">2562</span><a name="line.2562"></a>
<span class="sourceLineNo">2563</span>    private &lt;E&gt; E toEnum(Class&lt;E&gt; enumClass, int i) {<a name="line.2563"></a>
<span class="sourceLineNo">2564</span>        E[] enumConstants = enumClass.getEnumConstants();<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>        if (i &gt; enumConstants.length) {<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>            throw new IndexOutOfBoundsException(String.format(<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>                    "%d is too large of an ordinal to convert to the enum %s", i, enumClass.getName()));<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>        }<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>        return enumConstants[i];<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>    }<a name="line.2570"></a>
<span class="sourceLineNo">2571</span><a name="line.2571"></a>
<span class="sourceLineNo">2572</span>    private String enumConversionErrorMessage(Enum&lt;?&gt; e, String type) {<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>        return String.format("%s.%s has an ordinal value too large for a %s", e.getClass().getName(), e.name(), type);<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>    }<a name="line.2574"></a>
<span class="sourceLineNo">2575</span><a name="line.2575"></a>
<span class="sourceLineNo">2576</span>    /**<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>     * {@inheritDoc}<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>     */<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>    @Override<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSet(Class&lt;E&gt; enumClass) {<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>        return toEnumSet(enumClass, get() &amp; BYTE_MASK);<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>    }<a name="line.2582"></a>
<span class="sourceLineNo">2583</span><a name="line.2583"></a>
<span class="sourceLineNo">2584</span>    /**<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>     * {@inheritDoc}<a name="line.2585"></a>
<span class="sourceLineNo">2586</span>     */<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>    @Override<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSet(int index, Class&lt;E&gt; enumClass) {<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>        return toEnumSet(enumClass, get(index) &amp; BYTE_MASK);<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>    }<a name="line.2590"></a>
<span class="sourceLineNo">2591</span><a name="line.2591"></a>
<span class="sourceLineNo">2592</span>    /**<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>     * {@inheritDoc}<a name="line.2593"></a>
<span class="sourceLineNo">2594</span>     */<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>    @Override<a name="line.2595"></a>
<span class="sourceLineNo">2596</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetShort(Class&lt;E&gt; enumClass) {<a name="line.2596"></a>
<span class="sourceLineNo">2597</span>        return toEnumSet(enumClass, getShort() &amp; SHORT_MASK);<a name="line.2597"></a>
<span class="sourceLineNo">2598</span>    }<a name="line.2598"></a>
<span class="sourceLineNo">2599</span><a name="line.2599"></a>
<span class="sourceLineNo">2600</span>    /**<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>     * {@inheritDoc}<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>     */<a name="line.2602"></a>
<span class="sourceLineNo">2603</span>    @Override<a name="line.2603"></a>
<span class="sourceLineNo">2604</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetShort(int index, Class&lt;E&gt; enumClass) {<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>        return toEnumSet(enumClass, getShort(index) &amp; SHORT_MASK);<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>    }<a name="line.2606"></a>
<span class="sourceLineNo">2607</span><a name="line.2607"></a>
<span class="sourceLineNo">2608</span>    /**<a name="line.2608"></a>
<span class="sourceLineNo">2609</span>     * {@inheritDoc}<a name="line.2609"></a>
<span class="sourceLineNo">2610</span>     */<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>    @Override<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetInt(Class&lt;E&gt; enumClass) {<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>        return toEnumSet(enumClass, getInt() &amp; INT_MASK);<a name="line.2613"></a>
<span class="sourceLineNo">2614</span>    }<a name="line.2614"></a>
<span class="sourceLineNo">2615</span><a name="line.2615"></a>
<span class="sourceLineNo">2616</span>    /**<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>     * {@inheritDoc}<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>     */<a name="line.2618"></a>
<span class="sourceLineNo">2619</span>    @Override<a name="line.2619"></a>
<span class="sourceLineNo">2620</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetInt(int index, Class&lt;E&gt; enumClass) {<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>        return toEnumSet(enumClass, getInt(index) &amp; INT_MASK);<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>    }<a name="line.2622"></a>
<span class="sourceLineNo">2623</span><a name="line.2623"></a>
<span class="sourceLineNo">2624</span>    /**<a name="line.2624"></a>
<span class="sourceLineNo">2625</span>     * {@inheritDoc}<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>     */<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>    @Override<a name="line.2627"></a>
<span class="sourceLineNo">2628</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetLong(Class&lt;E&gt; enumClass) {<a name="line.2628"></a>
<span class="sourceLineNo">2629</span>        return toEnumSet(enumClass, getLong());<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
<span class="sourceLineNo">2631</span><a name="line.2631"></a>
<span class="sourceLineNo">2632</span>    /**<a name="line.2632"></a>
<span class="sourceLineNo">2633</span>     * {@inheritDoc}<a name="line.2633"></a>
<span class="sourceLineNo">2634</span>     */<a name="line.2634"></a>
<span class="sourceLineNo">2635</span>    @Override<a name="line.2635"></a>
<span class="sourceLineNo">2636</span>    public &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; getEnumSetLong(int index, Class&lt;E&gt; enumClass) {<a name="line.2636"></a>
<span class="sourceLineNo">2637</span>        return toEnumSet(enumClass, getLong(index));<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>    }<a name="line.2638"></a>
<span class="sourceLineNo">2639</span><a name="line.2639"></a>
<span class="sourceLineNo">2640</span>    private &lt;E extends Enum&lt;E&gt;&gt; EnumSet&lt;E&gt; toEnumSet(Class&lt;E&gt; clazz, long vector) {<a name="line.2640"></a>
<span class="sourceLineNo">2641</span>        EnumSet&lt;E&gt; set = EnumSet.noneOf(clazz);<a name="line.2641"></a>
<span class="sourceLineNo">2642</span>        long mask = 1;<a name="line.2642"></a>
<span class="sourceLineNo">2643</span>        for (E e : clazz.getEnumConstants()) {<a name="line.2643"></a>
<span class="sourceLineNo">2644</span>            if ((mask &amp; vector) == mask) {<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>                set.add(e);<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>            }<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>            mask &lt;&lt;= 1;<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>        }<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>        return set;<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>    }<a name="line.2650"></a>
<span class="sourceLineNo">2651</span><a name="line.2651"></a>
<span class="sourceLineNo">2652</span>    /**<a name="line.2652"></a>
<span class="sourceLineNo">2653</span>     * {@inheritDoc}<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>     */<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>    @Override<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSet(Set&lt;E&gt; set) {<a name="line.2656"></a>
<span class="sourceLineNo">2657</span>        long vector = toLong(set);<a name="line.2657"></a>
<span class="sourceLineNo">2658</span>        if ((vector &amp; ~BYTE_MASK) != 0) {<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>            throw new IllegalArgumentException("The enum set is too large to fit in a byte: " + set);<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>        }<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>        return put((byte) vector);<a name="line.2661"></a>
<span class="sourceLineNo">2662</span>    }<a name="line.2662"></a>
<span class="sourceLineNo">2663</span><a name="line.2663"></a>
<span class="sourceLineNo">2664</span>    /**<a name="line.2664"></a>
<span class="sourceLineNo">2665</span>     * {@inheritDoc}<a name="line.2665"></a>
<span class="sourceLineNo">2666</span>     */<a name="line.2666"></a>
<span class="sourceLineNo">2667</span>    @Override<a name="line.2667"></a>
<span class="sourceLineNo">2668</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSet(int index, Set&lt;E&gt; set) {<a name="line.2668"></a>
<span class="sourceLineNo">2669</span>        long vector = toLong(set);<a name="line.2669"></a>
<span class="sourceLineNo">2670</span>        if ((vector &amp; ~BYTE_MASK) != 0) {<a name="line.2670"></a>
<span class="sourceLineNo">2671</span>            throw new IllegalArgumentException("The enum set is too large to fit in a byte: " + set);<a name="line.2671"></a>
<span class="sourceLineNo">2672</span>        }<a name="line.2672"></a>
<span class="sourceLineNo">2673</span>        return put(index, (byte) vector);<a name="line.2673"></a>
<span class="sourceLineNo">2674</span>    }<a name="line.2674"></a>
<span class="sourceLineNo">2675</span><a name="line.2675"></a>
<span class="sourceLineNo">2676</span>    /**<a name="line.2676"></a>
<span class="sourceLineNo">2677</span>     * {@inheritDoc}<a name="line.2677"></a>
<span class="sourceLineNo">2678</span>     */<a name="line.2678"></a>
<span class="sourceLineNo">2679</span>    @Override<a name="line.2679"></a>
<span class="sourceLineNo">2680</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetShort(Set&lt;E&gt; set) {<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>        long vector = toLong(set);<a name="line.2681"></a>
<span class="sourceLineNo">2682</span>        if ((vector &amp; ~SHORT_MASK) != 0) {<a name="line.2682"></a>
<span class="sourceLineNo">2683</span>            throw new IllegalArgumentException("The enum set is too large to fit in a short: " + set);<a name="line.2683"></a>
<span class="sourceLineNo">2684</span>        }<a name="line.2684"></a>
<span class="sourceLineNo">2685</span>        return putShort((short) vector);<a name="line.2685"></a>
<span class="sourceLineNo">2686</span>    }<a name="line.2686"></a>
<span class="sourceLineNo">2687</span><a name="line.2687"></a>
<span class="sourceLineNo">2688</span>    /**<a name="line.2688"></a>
<span class="sourceLineNo">2689</span>     * {@inheritDoc}<a name="line.2689"></a>
<span class="sourceLineNo">2690</span>     */<a name="line.2690"></a>
<span class="sourceLineNo">2691</span>    @Override<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetShort(int index, Set&lt;E&gt; set) {<a name="line.2692"></a>
<span class="sourceLineNo">2693</span>        long vector = toLong(set);<a name="line.2693"></a>
<span class="sourceLineNo">2694</span>        if ((vector &amp; ~SHORT_MASK) != 0) {<a name="line.2694"></a>
<span class="sourceLineNo">2695</span>            throw new IllegalArgumentException("The enum set is too large to fit in a short: " + set);<a name="line.2695"></a>
<span class="sourceLineNo">2696</span>        }<a name="line.2696"></a>
<span class="sourceLineNo">2697</span>        return putShort(index, (short) vector);<a name="line.2697"></a>
<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
<span class="sourceLineNo">2699</span><a name="line.2699"></a>
<span class="sourceLineNo">2700</span>    /**<a name="line.2700"></a>
<span class="sourceLineNo">2701</span>     * {@inheritDoc}<a name="line.2701"></a>
<span class="sourceLineNo">2702</span>     */<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>    @Override<a name="line.2703"></a>
<span class="sourceLineNo">2704</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetInt(Set&lt;E&gt; set) {<a name="line.2704"></a>
<span class="sourceLineNo">2705</span>        long vector = toLong(set);<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>        if ((vector &amp; ~INT_MASK) != 0) {<a name="line.2706"></a>
<span class="sourceLineNo">2707</span>            throw new IllegalArgumentException("The enum set is too large to fit in an int: " + set);<a name="line.2707"></a>
<span class="sourceLineNo">2708</span>        }<a name="line.2708"></a>
<span class="sourceLineNo">2709</span>        return putInt((int) vector);<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>    }<a name="line.2710"></a>
<span class="sourceLineNo">2711</span><a name="line.2711"></a>
<span class="sourceLineNo">2712</span>    /**<a name="line.2712"></a>
<span class="sourceLineNo">2713</span>     * {@inheritDoc}<a name="line.2713"></a>
<span class="sourceLineNo">2714</span>     */<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>    @Override<a name="line.2715"></a>
<span class="sourceLineNo">2716</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetInt(int index, Set&lt;E&gt; set) {<a name="line.2716"></a>
<span class="sourceLineNo">2717</span>        long vector = toLong(set);<a name="line.2717"></a>
<span class="sourceLineNo">2718</span>        if ((vector &amp; ~INT_MASK) != 0) {<a name="line.2718"></a>
<span class="sourceLineNo">2719</span>            throw new IllegalArgumentException("The enum set is too large to fit in an int: " + set);<a name="line.2719"></a>
<span class="sourceLineNo">2720</span>        }<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>        return putInt(index, (int) vector);<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>    }<a name="line.2722"></a>
<span class="sourceLineNo">2723</span><a name="line.2723"></a>
<span class="sourceLineNo">2724</span>    /**<a name="line.2724"></a>
<span class="sourceLineNo">2725</span>     * {@inheritDoc}<a name="line.2725"></a>
<span class="sourceLineNo">2726</span>     */<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>    @Override<a name="line.2727"></a>
<span class="sourceLineNo">2728</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetLong(Set&lt;E&gt; set) {<a name="line.2728"></a>
<span class="sourceLineNo">2729</span>        return putLong(toLong(set));<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>    }<a name="line.2730"></a>
<span class="sourceLineNo">2731</span><a name="line.2731"></a>
<span class="sourceLineNo">2732</span>    /**<a name="line.2732"></a>
<span class="sourceLineNo">2733</span>     * {@inheritDoc}<a name="line.2733"></a>
<span class="sourceLineNo">2734</span>     */<a name="line.2734"></a>
<span class="sourceLineNo">2735</span>    @Override<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>    public &lt;E extends Enum&lt;E&gt;&gt; IoBuffer putEnumSetLong(int index, Set&lt;E&gt; set) {<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>        return putLong(index, toLong(set));<a name="line.2737"></a>
<span class="sourceLineNo">2738</span>    }<a name="line.2738"></a>
<span class="sourceLineNo">2739</span><a name="line.2739"></a>
<span class="sourceLineNo">2740</span>    private &lt;E extends Enum&lt;E&gt;&gt; long toLong(Set&lt;E&gt; set) {<a name="line.2740"></a>
<span class="sourceLineNo">2741</span>        long vector = 0;<a name="line.2741"></a>
<span class="sourceLineNo">2742</span>        for (E e : set) {<a name="line.2742"></a>
<span class="sourceLineNo">2743</span>            if (e.ordinal() &gt;= Long.SIZE) {<a name="line.2743"></a>
<span class="sourceLineNo">2744</span>                throw new IllegalArgumentException("The enum set is too large to fit in a bit vector: " + set);<a name="line.2744"></a>
<span class="sourceLineNo">2745</span>            }<a name="line.2745"></a>
<span class="sourceLineNo">2746</span>            vector |= 1L &lt;&lt; e.ordinal();<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>        }<a name="line.2747"></a>
<span class="sourceLineNo">2748</span>        return vector;<a name="line.2748"></a>
<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
<span class="sourceLineNo">2750</span><a name="line.2750"></a>
<span class="sourceLineNo">2751</span>    /**<a name="line.2751"></a>
<span class="sourceLineNo">2752</span>     * This method forwards the call to {@link #expand(int)} only when<a name="line.2752"></a>
<span class="sourceLineNo">2753</span>     * &lt;tt&gt;autoExpand&lt;/tt&gt; property is &lt;tt&gt;true&lt;/tt&gt;.<a name="line.2753"></a>
<span class="sourceLineNo">2754</span>     */<a name="line.2754"></a>
<span class="sourceLineNo">2755</span>    private IoBuffer autoExpand(int expectedRemaining) {<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>        if (isAutoExpand()) {<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>            expand(expectedRemaining, true);<a name="line.2757"></a>
<span class="sourceLineNo">2758</span>        }<a name="line.2758"></a>
<span class="sourceLineNo">2759</span>        return this;<a name="line.2759"></a>
<span class="sourceLineNo">2760</span>    }<a name="line.2760"></a>
<span class="sourceLineNo">2761</span><a name="line.2761"></a>
<span class="sourceLineNo">2762</span>    /**<a name="line.2762"></a>
<span class="sourceLineNo">2763</span>     * This method forwards the call to {@link #expand(int)} only when<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>     * &lt;tt&gt;autoExpand&lt;/tt&gt; property is &lt;tt&gt;true&lt;/tt&gt;.<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>     */<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>    private IoBuffer autoExpand(int pos, int expectedRemaining) {<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>        if (isAutoExpand()) {<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>            expand(pos, expectedRemaining, true);<a name="line.2768"></a>
<span class="sourceLineNo">2769</span>        }<a name="line.2769"></a>
<span class="sourceLineNo">2770</span>        return this;<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>    }<a name="line.2771"></a>
<span class="sourceLineNo">2772</span><a name="line.2772"></a>
<span class="sourceLineNo">2773</span>    private static void checkFieldSize(int fieldSize) {<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>        if (fieldSize &lt; 0) {<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>            throw new IllegalArgumentException("fieldSize cannot be negative: " + fieldSize);<a name="line.2775"></a>
<span class="sourceLineNo">2776</span>        }<a name="line.2776"></a>
<span class="sourceLineNo">2777</span>    }<a name="line.2777"></a>
<span class="sourceLineNo">2778</span>}<a name="line.2778"></a>




























































</pre>
</div>
</body>
</html>
