org.apache.hadoop.hbase.io.hfile
Interface HFileScanner

All Known Implementing Classes:
HFile.Reader.Scanner

public interface HFileScanner

A scanner allows you to position yourself within a HFile and scan through it. It allows you to reposition yourself as well.

A scanner doesn't always have a key/value that it is pointing to when it is first created and before seekTo()/seekTo(byte[]) are called. In this case, getKey()/getValue() returns null. At most other times, a key and value will be available. The general pattern is that you position the Scanner using the seekTo variants and then getKey and getValue.


Method Summary
 ByteBuffer getKey()
          Gets a buffer view to the current key.
 String getKeyString()
          Convenience method to get a copy of the key as a string - interpreting the bytes as UTF8.
 KeyValue getKeyValue()
           
 HFile.Reader getReader()
           
 ByteBuffer getValue()
          Gets a buffer view to the current value.
 String getValueString()
          Convenience method to get a copy of the value as a string - interpreting the bytes as UTF8.
 boolean isSeeked()
           
 boolean next()
          Scans to the next entry in the file.
 int reseekTo(byte[] key)
          Reseek to or just before the passed key.
 int reseekTo(byte[] key, int offset, int length)
           
 boolean seekBefore(byte[] key)
          Consider the key stream of all the keys in the file, k[0] ..
 boolean seekBefore(byte[] key, int offset, int length)
           
 boolean seekTo()
          Positions this scanner at the start of the file.
 int seekTo(byte[] key)
          SeekTo or just before the passed key.
 int seekTo(byte[] key, int offset, int length)
           
 

Method Detail

seekTo

int seekTo(byte[] key)
           throws IOException
SeekTo or just before the passed key. Examine the return code to figure whether we found the key or not. Consider the key stream of all the keys in the file, k[0] .. k[n], where there are n keys in the file.

Parameters:
key - Key to find.
Returns:
-1, if key < k[0], no position; 0, such that k[i] = key and scanner is left in position i; and 1, such that k[i] < key, and scanner is left in position i. The scanner will position itself between k[i] and k[i+1] where k[i] < key <= k[i+1]. If there is no key k[i+1] greater than or equal to the input key, then the scanner will position itself at the end of the file and next() will return false when it is called.
Throws:
IOException

seekTo

int seekTo(byte[] key,
           int offset,
           int length)
           throws IOException
Throws:
IOException

reseekTo

int reseekTo(byte[] key)
             throws IOException
Reseek to or just before the passed key. Similar to seekTo except that this can be called even if the scanner is not at the beginning of a file. This can be used to seek only to keys which come after the current position of the scanner. Consider the key stream of all the keys in the file, k[0] .. k[n], where there are n keys in the file after current position of HFileScanner. The scanner will position itself between k[i] and k[i+1] where k[i] < key <= k[i+1]. If there is no key k[i+1] greater than or equal to the input key, then the scanner will position itself at the end of the file and next() will return false when it is called.

Parameters:
key - Key to find (should be non-null)
Returns:
-1, if key < k[0], no position; 0, such that k[i] = key and scanner is left in position i; and 1, such that k[i] < key, and scanner is left in position i.
Throws:
IOException

reseekTo

int reseekTo(byte[] key,
             int offset,
             int length)
             throws IOException
Throws:
IOException

seekBefore

boolean seekBefore(byte[] key)
                   throws IOException
Consider the key stream of all the keys in the file, k[0] .. k[n], where there are n keys in the file.

Parameters:
key - Key to find
Returns:
false if key <= k[0] or true with scanner in position 'i' such that: k[i] < key. Furthermore: there may be a k[i+1], such that k[i] < key <= k[i+1] but there may also NOT be a k[i+1], and next() will return false (EOF).
Throws:
IOException

seekBefore

boolean seekBefore(byte[] key,
                   int offset,
                   int length)
                   throws IOException
Throws:
IOException

seekTo

boolean seekTo()
               throws IOException
Positions this scanner at the start of the file.

Returns:
False if empty file; i.e. a call to next would return false and the current key and value are undefined.
Throws:
IOException

next

boolean next()
             throws IOException
Scans to the next entry in the file.

Returns:
Returns false if you are at the end otherwise true if more in file.
Throws:
IOException

getKey

ByteBuffer getKey()
Gets a buffer view to the current key. You must call seekTo(byte[]) before this method.

Returns:
byte buffer for the key. The limit is set to the key size, and the position is 0, the start of the buffer view.

getValue

ByteBuffer getValue()
Gets a buffer view to the current value. You must call seekTo(byte[]) before this method.

Returns:
byte buffer for the value. The limit is set to the value size, and the position is 0, the start of the buffer view.

getKeyValue

KeyValue getKeyValue()
Returns:
Instance of KeyValue.

getKeyString

String getKeyString()
Convenience method to get a copy of the key as a string - interpreting the bytes as UTF8. You must call seekTo(byte[]) before this method.

Returns:
key as a string

getValueString

String getValueString()
Convenience method to get a copy of the value as a string - interpreting the bytes as UTF8. You must call seekTo(byte[]) before this method.

Returns:
value as a string

getReader

HFile.Reader getReader()
Returns:
Reader that underlies this Scanner instance.

isSeeked

boolean isSeeked()
Returns:
True is scanner has had one of the seek calls invoked; i.e. seekBefore(byte[]) or seekTo() or seekTo(byte[]). Otherwise returns false.


Copyright © 2011 The Apache Software Foundation. All Rights Reserved.