【问题标题】:ringbuffer for ByteArrayOutputStream in javajava中ByteArrayOutputStream的环形缓冲区
【发布时间】:2010-09-06 12:26:57
【问题描述】:

我正在寻找类似 ByteArrayOutputStream 但大小有限的东西。如果超过大小,则应覆盖旧数据。据我所知,这是一个环形缓冲区。有什么想法吗?

【问题讨论】:

  • 你想让它扩展OutputStream吗?
  • 可能吗?我只想要一个限制内存使用的实现?据我了解,在 ByteArrayOutputStream 中,字节数组无限制地增长。

标签: java bytearrayoutputstream


【解决方案1】:

其实没什么。你可以自己做。这是一个开始:

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)。)

【讨论】:

  • 谢谢,正是我需要的。我只是想知道我是否是唯一一个需要这样的东西的人?对我来说似乎并不陌生。
  • 你在谷歌上搜索过“java ringbuffer”吗?有大量的实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2016-06-11
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多