คำสั่งในการอ่านไฟล์แบบเดิมนั้นค่อนข้างยาวและเข้าใจยาก ตามตัวอย่างด้านล่าง
private val CustomReader by lazy {
val file = File(cacheDir, fileName)
val outputStream = FileOutputStream(file)
try {
val inputStream = assets.open(fileName)
var bytesCopied: Long = 0
val buffer = ByteArray(8 * 1024)
var bytes = inputStream.read(buffer)
while (bytes >= 0) {
outputStream.write(buffer, 0, bytes)
bytesCopied += bytes
bytes = inputStream.read(buffer)
}
} finally {
outputStream.close()
}
CustomReader(file)
}
ใน Kotlin 1.2 มี extension function สำหรับ Closeable ที่เรียกว่า use โดยเจ้าคำสั่งนี้จะช่วยอำนวยความสะดวกให้เรา ทำให้เราไม่ต้องตาม try finally close() เหมือนแต่ก่อนอีกต่อไป.
ด้วยคำสั่งนี้เราสามารถลดความซับซ้อนของ code ด้านบนได้อย่างง่ายดาย ดั่งตัวอย่างด้านล่างนี้เลย
private val CustomReader by lazy {
val file = File(cacheDir, fileName)
val outputStream = FileOutputStream(file)
outputStream.use { outputStream ->
val inputStream = assets.open(fileName)
var bytesCopied: Long = 0
val buffer = ByteArray(8 * 1024)
var bytes = inputStream.read(buffer)
while (bytes >= 0) {
outputStream.write(buffer, 0, bytes)
bytesCopied += bytes
bytes = inputStream.read(buffer)
}
}
CustomReader(file)
}
แต่ยังไม่หมด เราสามารถลด code ได้อีกด้วย extension function อีกสองตัวคือ
copy-to
private val CustomReader by lazy {
val file = File(cacheDir, fileName)
val outputStream = FileOutputStream(file)
outputStream().use { fileOut ->
assets.open(fileName).copyTo(fileOut)
}
CustomReader(file)
}
outputStream
private val CustomReader by lazy {
val file = File(cacheDir, fileName)
file.outputStream().use { fileOut ->
assets.open(fileName).copyTo(fileOut)
}
CustomReader(file)
}
Top comments (0)