2010-09-06 61 views
2

我正在寻找像ByteArrayOutputStream但有限的大小。如果超过大小,则应覆盖旧数据。就我所了解的缓冲器而言。有任何想法吗?在Java中的ByteArrayOutputStream ringbuffer

+0

你想它扩展的OutputStream? – aioobe 2010-09-06 12:36:31

+0

可能是?我只想要一个内存使用受限的实现?在ByteArrayOutputStream中,字节数组的增长没有限制,据我了解。 – Martin 2010-09-06 13:06:14

回答

3

其实并没有太多。你可以自己做。这里是一个开始:

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),如果你需要的效率。)

+0

谢谢,正是我需要的。我只是想知道如果我是唯一一个需要这样的事情吗?对我来说似乎并不奇特。 – Martin 2010-09-06 13:21:20

+1

你在谷歌上搜索过“java ringbuffer”吗?有很多的实现。 – aioobe 2010-09-06 13:26:42

相关问题