Je cherche quelque chose comme ByteArrayOutputStream mais avec une taille limitée. Si la taille est dépassée, les anciennes données doivent être écrasées. C'est aussi loin que je comprends un ringbuffer. Des idées?ringbuffer pour ByteArrayOutputStream en java
2
A
Répondre
3
Il n'y a pas vraiment grand-chose. Vous pourriez le faire vous-même. Voici un début:
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;
}
}
(Vous pouvez passer outre write(byte[] b, int off, int len)
si vous avez besoin de l'efficacité.)
Voulez-vous à étendre OutputStream? – aioobe
peut-être? Je veux juste une implémentation où l'utilisation de la mémoire est restreinte? Dans ByteArrayOutputStream le tableau d'octets se développe sans limite autant que je comprends. – Martin