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

标签 java data-structures arrays

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

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

假设将有一个线程写入器(向缓存添加字节)和另一个线程,该线程读取一定数量的写入字节(如果已经存在)。

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

最佳答案

您可以在底层使用 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 的正确方法就足够了。

附注ArrayList 并没有完全扩展 - 创建了一个双倍大小的新数组,并且所有项目都被复制过来。

关于java - 在JAVA中创建不固定大小的字节数据结构的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28543100/

相关文章:

java - 硬编码密码的替代方案

java - 反射 - 从数据库值确定调用方法和参数

c++ - C 等价于 C++ STL

javascript - 如何找到一种过滤数组与另一个数组进行比较的方法

java - Pacman Ghost 类,这个方法是做什么的?

java - ImageIO.write bmp 不起作用

haskell - 编写此函数的正确(有效)方法是什么?

c - 实现特征结构 : what data type to use?

在 C 中将 1 个指针数组复制到第 2 个指针数组

c - 为什么这个二维指针表示法有效而另一个无效