mirror of
https://github.com/tursom/TursomServer.git
synced 2025-03-24 08:30:05 +08:00
完善Stream
This commit is contained in:
parent
066d78bbed
commit
f732137db9
@ -163,15 +163,18 @@ 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(str: String): Unit = put(str.toByteArray())
|
||||
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) {
|
||||
if (hasArray) {
|
||||
fun put(byteArray: ByteArray, offset: Int = 0, len: Int = byteArray.size - offset): Int {
|
||||
return if (hasArray) {
|
||||
byteArray.copyInto(array, writeOffset, offset, offset + len)
|
||||
writePosition += len
|
||||
len
|
||||
} else {
|
||||
write {
|
||||
val position = it.position()
|
||||
it.put(byteArray, offset, len)
|
||||
it.position() - position
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -237,7 +240,7 @@ interface ByteBuffer : Closeable {
|
||||
fun putLong(long: Long): Unit = put(long)
|
||||
fun putFloat(float: Float): Unit = put(float)
|
||||
fun putDouble(double: Double): Unit = put(double)
|
||||
fun putString(str: String): Unit = put(str)
|
||||
fun putString(str: String): Int = put(str)
|
||||
fun putBuffer(buffer: ByteBuffer): Int = put(buffer)
|
||||
fun putBytes(byteArray: ByteArray, startIndex: Int = 0, endIndex: Int = byteArray.size - startIndex) =
|
||||
put(byteArray, startIndex, endIndex)
|
||||
|
@ -1,6 +1,4 @@
|
||||
package cn.tursom.core.stream
|
||||
|
||||
interface IOStream : InputStream, OutputStream {
|
||||
|
||||
}
|
||||
interface IOStream : InputStream, OutputStream
|
||||
|
||||
|
@ -1,14 +1,23 @@
|
||||
package cn.tursom.core.stream
|
||||
|
||||
import cn.tursom.core.buffer.ByteBuffer
|
||||
import cn.tursom.core.buffer.impl.HeapByteBuffer
|
||||
import java.io.Closeable
|
||||
|
||||
interface InputStream : Closeable {
|
||||
val available: Int get() = 0
|
||||
fun skip(n: Long)
|
||||
fun read(): Int
|
||||
fun read(buffer: ByteArray)
|
||||
fun read(buffer: ByteArray, offset: Int, len: Int)
|
||||
fun read(buffer: ByteBuffer)
|
||||
fun read(
|
||||
buffer: ByteArray,
|
||||
offset: Int = 0,
|
||||
len: Int = buffer.size - offset
|
||||
): Int {
|
||||
val byteBuffer = HeapByteBuffer(buffer, offset, len)
|
||||
byteBuffer.clear()
|
||||
read(byteBuffer)
|
||||
return byteBuffer.writePosition
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,25 @@
|
||||
package cn.tursom.core.stream
|
||||
|
||||
import cn.tursom.core.buffer.ByteBuffer
|
||||
import cn.tursom.core.buffer.impl.HeapByteBuffer
|
||||
import java.io.Closeable
|
||||
|
||||
interface OutputStream : Closeable {
|
||||
fun write(byte: Byte)
|
||||
fun write(buffer: ByteArray)
|
||||
fun write(buffer: ByteArray, offset: Int, len: Int)
|
||||
fun write(buffer: ByteBuffer)
|
||||
fun flush()
|
||||
fun write(byte: Byte) {
|
||||
write(byteArrayOf(byte))
|
||||
}
|
||||
|
||||
fun write(
|
||||
buffer: ByteArray,
|
||||
offset: Int = 0,
|
||||
len: Int = buffer.size - offset
|
||||
): Int {
|
||||
val byteBuffer = HeapByteBuffer(buffer, offset, len)
|
||||
write(byteBuffer)
|
||||
return byteBuffer.readPosition
|
||||
}
|
||||
|
||||
fun flush() {}
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,8 @@ import kotlin.coroutines.suspendCoroutine
|
||||
interface SuspendInputStream : InputStream {
|
||||
fun skip(n: Long, handler: () -> Unit)
|
||||
fun read(handler: (Int) -> Unit)
|
||||
fun read(buffer: ByteArray, handler: () -> Unit)
|
||||
fun read(buffer: ByteArray, offset: Int, len: Int, handler: () -> Unit)
|
||||
fun read(buffer: ByteArray, handler: (Int) -> Unit)
|
||||
fun read(buffer: ByteArray, offset: Int, len: Int, handler: (Int) -> Unit)
|
||||
fun read(buffer: ByteBuffer, handler: () -> Unit)
|
||||
|
||||
suspend fun suspendSkip(n: Long) {
|
||||
|
@ -2,75 +2,43 @@ package cn.tursom.core.stream.impl
|
||||
|
||||
import cn.tursom.core.buffer.ByteBuffer
|
||||
import cn.tursom.core.stream.IOStream
|
||||
import cn.tursom.core.stream.InputStream
|
||||
import cn.tursom.core.stream.OutputStream
|
||||
import cn.tursom.core.stream.SuspendInputStream
|
||||
|
||||
class ByteBufferIOStream(
|
||||
private val buffer: ByteBuffer
|
||||
) : IOStream, SuspendInputStream {
|
||||
@Volatile
|
||||
private var handler: (() -> Unit)? = null
|
||||
class ByteBufferIOStream private constructor(
|
||||
private val buffer: ByteBuffer,
|
||||
val inputStream: ByteBufferInputStream,
|
||||
val outputStream: ByteBufferOutputStream
|
||||
) : IOStream,
|
||||
SuspendInputStream,
|
||||
InputStream by inputStream,
|
||||
OutputStream by outputStream {
|
||||
constructor(buffer: ByteBuffer) : this(buffer, ByteBufferInputStream(buffer), ByteBufferOutputStream(buffer))
|
||||
|
||||
override fun skip(n: Long, handler: () -> Unit) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun skip(n: Long) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
override fun skip(n: Long, handler: () -> Unit) = handler()
|
||||
override fun skip(n: Long) {}
|
||||
|
||||
override fun read(handler: (Int) -> Unit) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
handler(read())
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray, handler: () -> Unit) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
override fun read(buffer: ByteArray, handler: (Int) -> Unit) {
|
||||
handler(read(buffer))
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int, handler: () -> Unit) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int, handler: (Int) -> Unit) {
|
||||
handler(read(buffer, offset, len))
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer, handler: () -> Unit) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun read(): Int {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
read(buffer)
|
||||
handler()
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun write(byte: Byte) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray, offset: Int, len: Int) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteBuffer) {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
override fun flush() {
|
||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
||||
buffer.close()
|
||||
inputStream.close()
|
||||
outputStream.close()
|
||||
}
|
||||
}
|
@ -9,27 +9,25 @@ class ByteBufferInputStream(
|
||||
private var closed = false
|
||||
override val available: Int get() = buffer.readable
|
||||
|
||||
override fun skip(n: Long) = checkClosed {
|
||||
buffer.readPosition += n.toInt()
|
||||
override fun skip(n: Long) {
|
||||
checkClosed {
|
||||
buffer.readPosition += n.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
override fun read(): Int = if (closed || buffer.readable == 0) -1 else buffer.get().toInt()
|
||||
|
||||
override fun read(buffer: ByteArray) = checkClosed {
|
||||
this.buffer.writeTo(buffer)
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int) = checkClosed {
|
||||
this.buffer.writeTo(buffer, offset, len)
|
||||
} ?: -1
|
||||
|
||||
override fun read(buffer: ByteBuffer) {
|
||||
checkClosed {
|
||||
this.buffer.writeTo(buffer)
|
||||
}
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer) = checkClosed {
|
||||
this.buffer.writeTo(buffer)
|
||||
}
|
||||
|
||||
private inline fun checkClosed(action: () -> Unit) {
|
||||
if (!closed) action()
|
||||
}
|
||||
private inline fun <T> checkClosed(action: () -> T): T? = if (!closed) action() else null
|
||||
|
||||
override fun close() {
|
||||
closed = true
|
||||
|
@ -7,27 +7,25 @@ class ByteBufferOutputStream(
|
||||
val buffer: ByteBuffer
|
||||
) : OutputStream {
|
||||
private var closed = false
|
||||
override fun write(byte: Byte) = checkClosed {
|
||||
buffer.put(byte)
|
||||
override fun write(byte: Byte) {
|
||||
checkClosed {
|
||||
buffer.put(byte)
|
||||
}
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray) = checkClosed {
|
||||
this.buffer.put(buffer)
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray, offset: Int, len: Int) = checkClosed {
|
||||
override fun write(buffer: ByteArray, offset: Int, len: Int): Int = checkClosed {
|
||||
this.buffer.put(buffer, offset, len)
|
||||
}
|
||||
} ?: -1
|
||||
|
||||
override fun write(buffer: ByteBuffer) = checkClosed {
|
||||
buffer.writeTo(this.buffer)
|
||||
override fun write(buffer: ByteBuffer) {
|
||||
checkClosed {
|
||||
buffer.writeTo(this.buffer)
|
||||
}
|
||||
}
|
||||
|
||||
override fun flush() {}
|
||||
|
||||
private inline fun checkClosed(action: () -> Unit) {
|
||||
if (!closed) action()
|
||||
}
|
||||
private inline fun <T> checkClosed(action: () -> T): T? = if (!closed) action() else null
|
||||
|
||||
override fun close() {
|
||||
closed = true
|
||||
|
@ -13,6 +13,7 @@ class BytesIOStream private constructor(
|
||||
override fun skip(n: Long, handler: () -> Unit) = buBufferIOStream.skip(n, handler)
|
||||
override fun read(handler: (Int) -> Unit) = buBufferIOStream.read(handler)
|
||||
override fun read(buffer: ByteBuffer, handler: () -> Unit) = buBufferIOStream.read(buffer, handler)
|
||||
override fun read(buffer: ByteArray, handler: () -> Unit) = buBufferIOStream.read(buffer, handler)
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int, handler: () -> Unit) = buBufferIOStream.read(buffer, offset, len, handler)
|
||||
override fun read(buffer: ByteArray, handler: (Int) -> Unit) = buBufferIOStream.read(buffer, handler)
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int, handler: (Int) -> Unit) =
|
||||
buBufferIOStream.read(buffer, offset, len, handler)
|
||||
}
|
@ -13,12 +13,8 @@ class JavaInputStream(
|
||||
|
||||
override fun read(): Int = inputStream.read()
|
||||
|
||||
override fun read(buffer: ByteArray) {
|
||||
inputStream.read(buffer)
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int) {
|
||||
inputStream.read(buffer, offset, len)
|
||||
override fun read(buffer: ByteArray, offset: Int, len: Int): Int {
|
||||
return inputStream.read(buffer, offset, len)
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer) {
|
||||
|
@ -10,12 +10,9 @@ class JavaOutputStream(
|
||||
outputStream.write(byte.toInt())
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray) {
|
||||
outputStream.write(buffer)
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteArray, offset: Int, len: Int) {
|
||||
override fun write(buffer: ByteArray, offset: Int, len: Int): Int {
|
||||
outputStream.write(buffer, offset, len)
|
||||
return len
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteBuffer) {
|
||||
|
@ -119,12 +119,14 @@ class NettyByteBuffer(
|
||||
byteBuf.writeDouble(double)
|
||||
}
|
||||
|
||||
override fun put(str: String) {
|
||||
byteBuf.writeCharSequence(str, Charsets.UTF_8)
|
||||
override fun put(str: String): Int {
|
||||
return byteBuf.writeCharSequence(str, Charsets.UTF_8)
|
||||
}
|
||||
|
||||
override fun put(byteArray: ByteArray, offset: Int, len: Int) {
|
||||
override fun put(byteArray: ByteArray, offset: Int, len: Int): Int {
|
||||
val writePosition = byteBuf.writerIndex()
|
||||
byteBuf.writeBytes(byteArray, offset, len - offset)
|
||||
return byteBuf.writerIndex() - writePosition
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
|
Loading…
Reference in New Issue
Block a user