在 JAVA 中创建大小不固定的字节数据结构的最佳方法是什么
What is the best way to create byte data structure not fixed size in JAVA
我需要创建数据结构,我们称之为 ByteCache,它包含一定数量的字节,它应该支持这样的方法:
1) ByteCache.length() - returns 中存储的字节数
2) ByteCache.add(Byte[] bytes) - 添加新字节到当前包含的末尾
3) ByteCache.get(int offset, int length) - returns byte list from offset to offset+length bytes
假设将有一个线程编写器(将字节添加到缓存)和另一个线程读取一些已写入的字节(如果已经存在)。
那么在 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 的正确方法就足够了。
P.S。 ArrayList 没有完全扩展 - 创建了一个新的数组,它的大小是原来的两倍,并且所有项目都被复制了。
我需要创建数据结构,我们称之为 ByteCache,它包含一定数量的字节,它应该支持这样的方法:
1) ByteCache.length() - returns 中存储的字节数 2) ByteCache.add(Byte[] bytes) - 添加新字节到当前包含的末尾 3) ByteCache.get(int offset, int length) - returns byte list from offset to offset+length bytes
假设将有一个线程编写器(将字节添加到缓存)和另一个线程读取一些已写入的字节(如果已经存在)。
那么在 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 的正确方法就足够了。
P.S。 ArrayList 没有完全扩展 - 创建了一个新的数组,它的大小是原来的两倍,并且所有项目都被复制了。