Kotlin 写的环形 ByteBuffer,理论上是线程安全的。

本文介绍了一种环形缓冲区的实现方法,通过一个自定义的CircleByteBuffer类,支持数组的字节查看、写入和读取操作。该缓冲区在单线程写入和读取场景下表现良好,但多线程环境下需自行加锁。
class CircleByteBuffer(val size:Int) {
    private val datas=ByteArray(size)

    private var start=0
    private var end=0


    fun getLen():Int{
        if (start==end)
            return 0
        else if (start<end)
            return end-start
        else
            return start-end
    }

    fun getFree():Int{
        return size-getLen()
    }

    fun put(e:Byte){
        datas[end]=e
        val pos=end+1
        if (pos==size)
            end=0
        else if (pos==start)
            throw Exception("out buffer")
        else
            end=pos
    }
    fun get():Byte{
        if(getLen()==0)
            throw Exception("out buffer")
        val ret=datas[start]
        if (++start==size)
            start=0
        return ret
    }
    fun get(i:Int):Byte{
        if(i>=getLen())
            throw Exception("out buffer")
        var pos=start+i
        if (pos>=size)
            pos-=size
        return datas[pos]
    }

    fun puts(bts:ByteArray,ind:Int,len:Int){
        for (i in ind until len){
            put(bts[i])
        }
    }
    fun gets(len:Int):ByteArray{
        val bts=ByteArray(len)
        for (i in 0 until len){
            bts[i]=get()
        }
        return bts
    }
}

    环形缓冲区,可查看数组的某个byte,写入,读取。

理论上是线程安全的(使用多线程没碰到问题,但是不是很确定)

    只要一个线程只写,一个线程只读,是没问题的,如果多个线程同时写或者读需要自己加锁。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值