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

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,写入,读取。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kotlin中,可以使用ByteBuffer类来进行字节缓冲区的初始化。ByteBuffer是Java NIO库中的一部分,用于处理字节数据。 以下是一种常见的初始化ByteBuffer的方法: 1. 使用allocate()方法创建一个指定大小的ByteBuffer: ```kotlin val bufferSize = 1024 // 缓冲区大小 val buffer = ByteBuffer.allocate(bufferSize) ``` 2. 使用wrap()方法将现有的字节数组包装成ByteBuffer: ```kotlin val byteArray = byteArrayOf(1, 2, 3, 4, 5) // 字节数组 val buffer = ByteBuffer.wrap(byteArray) ``` 3. 使用put()方法将数据ByteBuffer: ```kotlin val buffer = ByteBuffer.allocate(10) buffer.put(1) // 入一个字节 buffer.putShort(2) // 入一个短整型数值 buffer.putInt(3) // 入一个整型数值 buffer.putLong(4) // 入一个长整型数值 buffer.putFloat(5.0f) // 入一个浮点数值 buffer.putDouble(6.0) // 入一个双精度浮点数值 ``` 4. 使用get()方法从ByteBuffer中读取数据: ```kotlin buffer.flip() // 切换为读模式 val byteValue = buffer.get() // 读取一个字节 val shortValue = buffer.getShort() // 读取一个短整型数值 val intValue = buffer.getInt() // 读取一个整型数值 val longValue = buffer.getLong() // 读取一个长整型数值 val floatValue = buffer.getFloat() // 读取一个浮点数值 val doubleValue = buffer.getDouble() // 读取一个双精度浮点数值 ``` 注意:在使用ByteBuffer时,需要注意切换读模式(通过flip()方法),以及确保读位置的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值