2010-09-06 41 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

相關問題