在java.io.InputStream类中定义了skip这个方法。在API中的描述如下:
<dl></dl>
<dd>Skips over and discards <code>n</code> bytes of data from this input stream. The <code>skip</code> method may, for a variety of reasons, end up skipping over some smaller number of bytes, possibly <code>0</code>. This may result from any of a number of conditions; reaching end of file before<code>n</code> bytes have been skipped is only one possibility. The actual number of bytes skipped is returned. If <code>n</code> is negative, no bytes are skipped.</dd>
The <code>skip</code> method of this class creates a byte array and then repeatedly reads into it until <code>n</code> bytes have been read or the end of the stream has been reached. Subclasses are encouraged to provide a more efficient implementation of this method. For instance, the implementation may depend on the ability to seek.
<dd></dd>
<dd><dl></dl></dd>
<dt>Parameters:</dt>
<code>n</code> - the number of bytes to be skipped.
<dt>Returns:</dt>
<dd>the actual number of bytes skipped.</dd>
<dt>Throws:</dt>
翻译如下:
跳过和丢弃此输入流中数据的 <code>n</code> 个字节。出于各种原因,<code>skip</code> 方法结束时跳过的字节数可能小于该数,也可能为 <code>0</code>。导致这种情况的原因很多,跳过 <code>n</code> 个字节之前已到达文件末尾只是其中一种可能。返回跳过的实际字节数。如果 <code>n</code> 为负,则不跳过任何字节。
此类的 <code>skip</code> 方法创建一个 byte 数组,然后重复将字节读入其中,直到读够 <code>n</code> 个字节或已到达流末尾为止。建议子类提供此方法更为有效的实现。例如,可依赖搜索能力的实现。
n
要跳过的字节数。
return
跳过的实际字节数。
Throws
如果流不支持搜索,或者发生其他 I/O 错误。
同时,其子类FileInputStream中也继承了skip这个方法。如API中所描述的,skip方法会存在跳过的字节数小于预期的情况。如果不对返回值进行处理的话,很容易忽视这个问题,导致结果错误。最近在看baksmali的源码,其中有一个简单而巧妙的方法来避过skip方法的这个弊端。
在分片上传文件的时候,进行skip,该处理手段非常重要。


本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/4973042.html如需转载请自行联系原作者
demoblog