在JAVA中创建字节数据结构不是固定大小的最佳方法是什么

时间:2015-02-16 13:58:48

标签: java data-structures bytearray

我需要创建数据结构,让我们称之为ByteCache,它包含一些字节数,它应该支持这样的方法:

1)ByteCache.length() - 返回存储在其中的字节数 2)ByteCache.add(Byte [] bytes) - 将新字节添加到当前包含的内部的末尾 3)ByteCache.get(int offset,int length) - 将字节列表从offset返回到offset + length bytes

它假设将有一个线程编写器(它将字节添加到缓存中)和另一个线程,如果已存在则会读取一些写入的字节。

那么在java中做这些事情的最佳方法是什么?可能有这样的数据结构,或者一些可以使用的库,我不知道,虽然我已经读过一些但没有得到线索。 我对java非常陌生,所以请耐心等待。

1 个答案:

答案 0 :(得分:1)

您可以使用ArrayList实现此功能。 ArrayList是一个数组,当添加的数据多于容量允许时,它会扩展。

您的ByteCache可能看起来像

public class ByteCache {

    ArrayList<Byte> backing = new ArrayList<Byte>();

    public ByteCache(){
    }

    public ByteCache(Byte[] bytes){
        add(bytes);
    }

    public void add(Byte[] bytes){
        for(Byte b : bytes){
            backing.add(b);
        }
    }

    public int length(){
        return backing.size();
    }

    public Byte[] get(int offset, int length){
        if(offset < 0 || length < 1){
            return null;
        }

        Byte[] toRet = new Byte[length];

        for(int i = offset; i < offset + length; i++){
            if(i == backing.size()){
                break;
            }
            toRet[i - offset] = backing.get(i);
        }
        return toRet;
    }
}

您需要实现自己的get()和add()方法,但是对于length(),调用ArrayList的正确方法就足够了。

P.S。 ArrayList没有完全展开 - 创建了一个大小翻倍的新数组,并且复制了所有项目。