Mercurial > hg4j
view src/com/tmate/hgkit/fs/ByteArrayDataAccess.java @ 159:f5aed108754e wrap-data-access
Approach with DataAccess instead of plain byte[] was merged into default branch
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 09 Mar 2011 13:28:02 +0100 |
parents | 9429c7bd1920 |
children |
line wrap: on
line source
/* * Copyright (c) 2011 Artem Tikhomirov */ package com.tmate.hgkit.fs; import java.io.IOException; /** * * @author artem */ public class ByteArrayDataAccess extends DataAccess { private final byte[] data; private final int offset; private final int length; private int pos; public ByteArrayDataAccess(byte[] data) { this(data, 0, data.length); } public ByteArrayDataAccess(byte[] data, int offset, int length) { this.data = data; this.offset = offset; this.length = length; pos = 0; } @Override public byte readByte() throws IOException { if (pos >= length) { throw new IOException(); } return data[offset + pos++]; } @Override public void readBytes(byte[] buf, int off, int len) throws IOException { if (len > (this.length - pos)) { throw new IOException(); } System.arraycopy(data, pos, buf, off, len); pos += len; } @Override public void reset() { pos = 0; } @Override public long length() { return length; } @Override public void seek(long offset) { pos = (int) offset; } @Override public void skip(int bytes) throws IOException { seek(pos + bytes); } @Override public boolean isEmpty() { return pos >= length; } // // when byte[] needed from DA, we may save few cycles and some memory giving this (otherwise unsafe) access to underlying data @Override public byte[] byteArray() { return data; } }