我正在找像ByteArrayOutputStream但大小有限的东西。如果超过大小,则应覆盖较旧的数据。这就是我对环形缓冲区的理解。有什么想法吗?
发布于 2010-09-06 21:09:56
这没什么大不了的。你可以自己做。这是一个开始:
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;
}
}(如果需要效率,您可能希望覆盖write(byte[] b, int off, int len)。)
https://stackoverflow.com/questions/3651435
复制相似问题