mirror of
https://github.com/tursom/TursomServer.git
synced 2025-02-05 09:10:32 +08:00
update buffers
This commit is contained in:
parent
7045d77c7d
commit
858cb31fbc
@ -745,24 +745,26 @@ inline fun Double.toBytes(byteOrder: ByteOrder = ByteOrder.nativeOrder(), action
|
||||
inline fun toChar(byteOrder: ByteOrder = ByteOrder.nativeOrder(), get: () -> Byte): Char {
|
||||
return when (byteOrder) {
|
||||
ByteOrder.LITTLE_ENDIAN -> {
|
||||
(get().toInt() or (get().toInt() shl 8))
|
||||
get().toInt() or (get().toInt() shl 8)
|
||||
}
|
||||
ByteOrder.BIG_ENDIAN -> {
|
||||
val late = get()
|
||||
(get().toInt() or (late.toInt() shl 8))
|
||||
get().toInt() or (late.toInt() shl 8)
|
||||
}
|
||||
else -> {
|
||||
throw UnsupportedOperationException()
|
||||
}
|
||||
else -> throw UnsupportedOperationException()
|
||||
}.toChar()
|
||||
}
|
||||
|
||||
inline fun toShort(byteOrder: ByteOrder = ByteOrder.nativeOrder(), get: () -> Byte): Short {
|
||||
return when (byteOrder) {
|
||||
ByteOrder.LITTLE_ENDIAN -> {
|
||||
(get().toInt() or (get().toInt() shl 8))
|
||||
get().toInt() or (get().toInt() shl 8)
|
||||
}
|
||||
ByteOrder.BIG_ENDIAN -> {
|
||||
val late = get()
|
||||
(get().toInt() or (late.toInt() shl 8))
|
||||
get().toInt() or (late.toInt() shl 8)
|
||||
}
|
||||
else -> throw UnsupportedOperationException()
|
||||
}.toShort()
|
||||
|
@ -1,8 +1,7 @@
|
||||
package cn.tursom.core.buffer
|
||||
|
||||
import cn.tursom.core.AsyncFile
|
||||
import cn.tursom.core.*
|
||||
import cn.tursom.core.Utils.bufferThreadLocal
|
||||
import cn.tursom.core.forEachIndex
|
||||
import java.io.Closeable
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
@ -94,12 +93,19 @@ interface ByteBuffer : Closeable {
|
||||
}
|
||||
|
||||
fun get(): Byte = read { it.get() }
|
||||
fun getChar(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Char = read { it.char }
|
||||
fun getShort(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Short = read { it.short }
|
||||
fun getInt(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Int = read { it.int }
|
||||
fun getLong(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Long = read { it.long }
|
||||
fun getFloat(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Float = read { it.float }
|
||||
fun getDouble(byteOrder: ByteOrder = ByteOrder.nativeOrder()): Double = read { it.double }
|
||||
fun getChar(): Char = read { it.char }
|
||||
fun getShort(): Short = read { it.short }
|
||||
fun getInt(): Int = read { it.int }
|
||||
fun getLong(): Long = read { it.long }
|
||||
fun getFloat(): Float = read { it.float }
|
||||
fun getDouble(): Double = read { it.double }
|
||||
|
||||
fun getChar(byteOrder: ByteOrder): Char = toChar(byteOrder) { get() }
|
||||
fun getShort(byteOrder: ByteOrder): Short = toShort(byteOrder) { get() }
|
||||
fun getInt(byteOrder: ByteOrder): Int = toInt(byteOrder) { get() }
|
||||
fun getLong(byteOrder: ByteOrder): Long = toLong(byteOrder) { get() }
|
||||
fun getFloat(byteOrder: ByteOrder): Float = toFloat(byteOrder) { get() }
|
||||
fun getDouble(byteOrder: ByteOrder): Double = toDouble(byteOrder) { get() }
|
||||
|
||||
fun getBytes(size: Int = readable): ByteArray = read {
|
||||
val bytes = ByteArray(size)
|
||||
@ -177,6 +183,14 @@ interface ByteBuffer : Closeable {
|
||||
fun put(long: Long): Unit = write { it.putLong(long) }
|
||||
fun put(float: Float): Unit = write { it.putFloat(float) }
|
||||
fun put(double: Double): Unit = write { it.putDouble(double) }
|
||||
|
||||
fun put(char: Char, byteOrder: ByteOrder): Unit = char.toBytes(byteOrder) { put(it) }
|
||||
fun put(short: Short, byteOrder: ByteOrder): Unit = short.toBytes(byteOrder) { put(it) }
|
||||
fun put(int: Int, byteOrder: ByteOrder): Unit = int.toBytes(byteOrder) { put(it) }
|
||||
fun put(long: Long, byteOrder: ByteOrder): Unit = long.toBytes(byteOrder) { put(it) }
|
||||
fun put(float: Float, byteOrder: ByteOrder): Unit = float.toBytes(byteOrder) { put(it) }
|
||||
fun put(double: Double, byteOrder: ByteOrder): Unit = double.toBytes(byteOrder) { put(it) }
|
||||
|
||||
fun put(str: String): Int = put(str.toByteArray())
|
||||
fun put(buffer: ByteBuffer): Int = buffer.writeTo(this)
|
||||
fun put(byteArray: ByteArray, offset: Int = 0, len: Int = byteArray.size - offset): Int {
|
||||
|
@ -7,6 +7,9 @@ package cn.tursom.core.buffer
|
||||
|
||||
import cn.tursom.buffer.MultipleByteBuffer
|
||||
import cn.tursom.core.buffer.impl.ArrayByteBuffer
|
||||
import cn.tursom.core.toBytes
|
||||
import cn.tursom.core.toInt
|
||||
import java.nio.ByteOrder
|
||||
import java.nio.channels.GatheringByteChannel
|
||||
import java.nio.channels.ReadableByteChannel
|
||||
import java.nio.channels.ScatteringByteChannel
|
||||
@ -152,4 +155,69 @@ val Collection<ByteBuffer>.writeable: Int
|
||||
var size = 0
|
||||
forEach { size += it.writeable }
|
||||
return size
|
||||
}
|
||||
}
|
||||
|
||||
fun ByteBuffer.getIntWithSize(size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()): Int {
|
||||
var time = 4
|
||||
return toInt(byteOrder) {
|
||||
if (--time < size) {
|
||||
get()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun ByteBuffer.getLongWithSize(size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()): Int {
|
||||
var time = 8
|
||||
return toInt(byteOrder) {
|
||||
if (--time < size) {
|
||||
get()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun ByteBuffer.putIntWithSize(n: Int, size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()) {
|
||||
when (byteOrder) {
|
||||
ByteOrder.LITTLE_ENDIAN -> {
|
||||
var time = size
|
||||
n.toBytes(ByteOrder.LITTLE_ENDIAN) {
|
||||
if (time++ < 4) {
|
||||
put(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
ByteOrder.BIG_ENDIAN -> {
|
||||
var time = size
|
||||
n.toBytes(ByteOrder.BIG_ENDIAN) {
|
||||
if (++time > 4) {
|
||||
put(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun ByteBuffer.putLongWithSize(l: Long, size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()) {
|
||||
when (byteOrder) {
|
||||
ByteOrder.LITTLE_ENDIAN -> {
|
||||
var time = size
|
||||
l.toBytes(ByteOrder.LITTLE_ENDIAN) {
|
||||
if (time++ < 8) {
|
||||
put(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
ByteOrder.BIG_ENDIAN -> {
|
||||
var time = size
|
||||
l.toBytes(ByteOrder.BIG_ENDIAN) {
|
||||
if (++time > 8) {
|
||||
put(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,7 @@ class DirectByteBuffer(
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
if (readPosition == 0) return
|
||||
if (writePosition == readPosition) {
|
||||
readPosition = 0
|
||||
writePosition = 0
|
||||
@ -40,8 +41,8 @@ class DirectByteBuffer(
|
||||
buffer.limit(writePosition)
|
||||
buffer.position(readPosition)
|
||||
buffer.compact()
|
||||
readPosition = buffer.position()
|
||||
writePosition = buffer.limit()
|
||||
readPosition = 0
|
||||
writePosition = buffer.position()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ class HeapByteBuffer(
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
if (readPosition == 0) return
|
||||
if (writePosition == readPosition) {
|
||||
readPosition = 0
|
||||
writePosition = 0
|
||||
@ -48,8 +49,8 @@ class HeapByteBuffer(
|
||||
buffer.limit(writePosition)
|
||||
buffer.position(readPosition)
|
||||
buffer.compact()
|
||||
readPosition = buffer.position()
|
||||
writePosition = buffer.limit()
|
||||
readPosition = 0
|
||||
writePosition = buffer.position()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,8 +11,6 @@ package cn.tursom.core.buffer
|
||||
|
||||
import cn.tursom.core.Unsafe.unsafe
|
||||
import cn.tursom.core.isStatic
|
||||
import cn.tursom.core.toInt
|
||||
import java.nio.ByteOrder
|
||||
|
||||
class UnsupportedException : Exception()
|
||||
|
||||
@ -208,25 +206,3 @@ fun <T> ByteBuffer.unSerialize(clazz: Class<T>): T {
|
||||
inline fun <reified T : Any> ByteBuffer.unSerialize(): T {
|
||||
return unSerialize(T::class.java)
|
||||
}
|
||||
|
||||
fun ByteBuffer.getIntWithSize(size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()): Int {
|
||||
var time = 4
|
||||
return toInt(byteOrder) {
|
||||
if (--time < size) {
|
||||
get()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun ByteBuffer.getLongWithSize(size: Int, byteOrder: ByteOrder = ByteOrder.nativeOrder()): Int {
|
||||
var time = 8
|
||||
return toInt(byteOrder) {
|
||||
if (--time < size) {
|
||||
get()
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user