SubwayTooter-Android-App/apng/src/main/java/jp/juggler/apng/util/ByteArrayTokenizer.kt

55 lines
1.2 KiB
Kotlin

package jp.juggler.apng.util
import jp.juggler.apng.ParseError
internal class ByteArrayTokenizer(ba: ByteArray) {
private val array: ByteArray = ba
private val arraySize: Int = ba.size
private var pos = 0
val size: Int
get()= arraySize
val remain: Int
get()= arraySize -pos
fun skipBytes(size: Int) {
pos += size
}
fun readBytes(size: Int): ByteArrayRange {
if (pos + size > arraySize) {
throw ParseError("readBytes: unexpected EoS")
}
val result = ByteArrayRange(array, pos, size)
pos+=size
return result
}
private fun readByte(): Int {
if (pos >= arraySize) {
throw ParseError("readBytes: unexpected EoS")
}
return array[pos++].toInt() and 0xff
}
fun readInt32(): Int {
val b0 = readByte()
val b1 = readByte()
val b2 = readByte()
val b3 = readByte()
return (b0 shl 24) or (b1 shl 16) or (b2 shl 8) or b3
}
fun readUInt16(): Int {
val b0 = readByte()
val b1 = readByte()
return (b0 shl 8) or b1
}
fun readUInt8() = readByte()
}