Better one:
// There are differences in how skip and seek behave
// when trying to skip more bytes than available in a file
// but ...
long skip(long len) throws IOException {
if ( len > 0 ) {
seek(getPos() + len);
return len;
}
return ( len < 0 ) ? -1 : 0;
}
This should fix HADOOP-1428, if not very efficiently.
Raghu.
Raghu Angadi wrote:
>
> We should force subclasses of FSInputStream to implement skip if skip is
> expected to be used. Only way I could think of achieving is to define
>
> long skip(long len) throws IOException {
> throw new IOException("Subclasses of FSInputStream should implement
> skip");
> }
>
> This makes sense for all the current FSInputStreams. But not sure if
> there is any way for subclasses to call InputStream.skip() is that makes
> sense.
>
> Raghu.
>
> Doug Cutting wrote:
>> Raghu Angadi wrote:
>>> Also, reading from block supports 'real skip', ie, it does not check
>>> checksum if an entire checksum block (usually 512 bytes) falls within
>>> the skip range. Another reason to implement our own skip.
>>
>> Yes, I don't see an alternative to implementing skip ourselves. The
>> optimization in InputStream#skip(), of using a static buffer, requires
>> this. Hopefully this method, like much of the checksum code, will be
>> shared between the generic ChecksumFileSystem and DFS's optimized
>> checksum implementation.
>>
>> Doug
>
|