AbstractExternalResource

abstract class AbstractExternalResource constructor(displayName: String?, cleanup: AbstractExternalResource.ResourceCleanCallback?) : ExternalResource

一个实现了基本方法的外部资源

实现

AbstractExternalResource 实现了大部分必要的方法, 只有 ExternalResource.inputStream, ExternalResource.size 还未实现

其中 ExternalResource.inputStream 要求每次读取的内容都是一致的

Example:

class MyCustomExternalResource: AbstractExternalResource() {
override fun inputStream0(): InputStream = FileInputStream("/test.txt")
override val size: Long get() = File("/test.txt").length()
}

资源释放

如同 mirai 内置的 ExternalResource 实现一样, AbstractExternalResource 也会被注册进入资源泄露监视器 (即意味着 AbstractExternalResource 也要求手动关闭)

为了确保逻辑正确性, AbstractExternalResource 不允许覆盖其 close 方法, 必须在构造 AbstractExternalResource 的时候给定一个 ResourceCleanCallback 以进行资源释放

对于 ResourceCleanCallback, 有以下要求

Example:

class MyRes(
cleanup: ResourceCleanCallback,
val delegate: Closable,
): AbstractExternalResource(cleanup) {
}

// 错误, 该写法会导致 Resource 永远也不会被自动释放
lateinit var myRes: MyRes
val cleanup = ResourceCleanCallback {
myRes.delegate.close()
}
myRes = MyRes(cleanup, fetchDelegate())

// 正确
val delegate: Closable
val cleanup = ResourceCleanCallback {
delegate.close()
}
val myRes = MyRes(cleanup, delegate)

Since

2.9

See also

Constructors

AbstractExternalResource
Link copied to clipboard
fun AbstractExternalResource(cleanup: AbstractExternalResource.ResourceCleanCallback? = null)
AbstractExternalResource
Link copied to clipboard
fun AbstractExternalResource(displayName: String? = null, cleanup: AbstractExternalResource.ResourceCleanCallback? = null)

Types

ResourceCleanCallback
Link copied to clipboard
fun interface ResourceCleanCallback

Functions

calculateResourceId
Link copied to clipboard
open fun calculateResourceId(): String
close
Link copied to clipboard
fun close()
inputStream
Link copied to clipboard
override fun inputStream(): <ERROR CLASS>

打开 InputStream. 在返回的 InputStream 被 InputStream.close 前无法再次打开流.

toAutoCloseable
Link copied to clipboard
open fun toAutoCloseable(): ExternalResource

创建一个在 使用一次 后就会自动 close 的 ExternalResource.

Properties

closed
Link copied to clipboard
override val closed: Deferred<Unit>

close 时会 CompletableDeferred.completeDeferred.

formatName
Link copied to clipboard
open override val formatName: String

文件格式,如 "png", "amr". 当无法自动识别格式时为 DEFAULT_FORMAT_NAME.

isAutoClose
Link copied to clipboard
open val isAutoClose: Boolean

是否在 使用一次 后自动 close.

md5
Link copied to clipboard
open override val md5: ByteArray

文件内容 MD5. 16 bytes

origin
Link copied to clipboard
open val origin: Any?

ExternalResource 的数据来源, 可能有以下的返回

sha1
Link copied to clipboard
open override val sha1: ByteArray

文件内容 SHA1. 16 bytes

size
Link copied to clipboard
abstract val size: Long

文件大小 bytes