java中ByteArrayOutputStream的环形缓冲区
我正在寻找类似ByteArrayOutputStream的东西,但尺寸有限。如果超出大小,则应覆盖旧数据。据我所知,这是一个环形缓冲区。有什么想法吗?其实没什么。你可以自己做。这是一个开始:java中ByteArrayOutputStream的环形缓冲区,java,bytearrayoutputstream,Java,Bytearrayoutputstream,我正在寻找类似ByteArrayOutputStream的东西,但尺寸有限。如果超出大小,则应覆盖旧数据。据我所知,这是一个环形缓冲区。有什么想法吗?其实没什么。你可以自己做。这是一个开始: class ByteArrayRingBuffer extends OutputStream { byte[] data; int capacity, pos = 0; boolean filled = false; public ByteArrayRingBuffer(
class ByteArrayRingBuffer extends OutputStream {
byte[] data;
int capacity, pos = 0;
boolean filled = false;
public ByteArrayRingBuffer(int capacity) {
data = new byte[capacity];
this.capacity = capacity;
}
@Override
public synchronized void write(int b) {
if (pos == capacity) {
filled = true;
pos = 0;
}
data[pos++] = (byte) b;
}
public byte[] toByteArray() {
if (!filled)
return Arrays.copyOf(data, pos);
byte[] ret = new byte[capacity];
System.arraycopy(data, pos, ret, 0, capacity - pos);
System.arraycopy(data, 0, ret, capacity - pos, pos);
return ret;
}
}
(如果需要效率,您可能需要重写
写入(字节[]b,int off,int len)
。是否要扩展OutputStream?可能是?我只想要一个内存使用受到限制的实现?据我所知,在ByteArrayOutputStream中,字节数组的增长没有限制。谢谢,这正是我所需要的。我只是想知道我是不是唯一一个需要这种东西的人?对我来说似乎并不陌生。你在谷歌上搜索过“JavaRingBuffer”吗?有大量的实现。