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

40 lines
1.1 KiB
Kotlin

@file:Suppress("JoinDeclarationAndAssignment")
package jp.juggler.apng
import jp.juggler.apng.util.StreamTokenizer
import java.util.zip.CRC32
internal class ApngChunk(crc32:CRC32,tokenizer: StreamTokenizer) {
val size: Int
val type: String
init {
size = tokenizer.readInt32()
val typeBytes = tokenizer.readBytes(4)
type = typeBytes.toString(Charsets.UTF_8)
crc32.update(typeBytes)
}
fun readBody(crc32:CRC32,tokenizer: StreamTokenizer): ByteArray {
val bytes = tokenizer.readBytes(size)
val crcExpect = tokenizer.readUInt32()
crc32.update(bytes, 0, size)
val crcActual = crc32.value
if (crcActual != crcExpect) throw ParseError("CRC not match.")
return bytes
}
fun skipBody(tokenizer: StreamTokenizer) {
tokenizer.skipBytes((size + 4).toLong())
}
fun checkCRC(tokenizer: StreamTokenizer, crcActual: Long) {
val crcExpect = tokenizer.readUInt32()
if (crcActual != crcExpect) throw ParseError("CRC not match.")
}
}