首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中ByteArrayOutputStream的环形缓冲区

java中ByteArrayOutputStream的环形缓冲区
EN

Stack Overflow用户
提问于 2010-09-06 20:26:57
回答 1查看 1.5K关注 0票数 2

我正在找像ByteArrayOutputStream但大小有限的东西。如果超过大小,则应覆盖较旧的数据。这就是我对环形缓冲区的理解。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2010-09-06 21:09:56

这没什么大不了的。你可以自己做。这是一个开始:

代码语言:javascript
复制
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)。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3651435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档