12483: More loading speed.
[arvados.git] / sdk / go / keepclient / block_cache.go
index e841a00fa1e1f3493bff67890b2aee70181a3bca..539975e1616637cad2d002c8e9e7d697c0820f63 100644 (file)
@@ -49,6 +49,19 @@ func (c *BlockCache) Sweep() {
        }
 }
 
+// ReadAt returns data from the cache, first retrieving it from Keep if
+// necessary.
+func (c *BlockCache) ReadAt(kc *KeepClient, locator string, p []byte, off int) (int, error) {
+       buf, err := c.Get(kc, locator)
+       if err != nil {
+               return 0, err
+       }
+       if off > len(buf) {
+               return 0, io.ErrUnexpectedEOF
+       }
+       return copy(p, buf[off:]), nil
+}
+
 // Get returns data from the cache, first retrieving it from Keep if
 // necessary.
 func (c *BlockCache) Get(kc *KeepClient, locator string) ([]byte, error) {