一個(gè)IO流apk傳輸示例

推薦文章:

一文帶你看懂JAVA IO流,史上最全面的IO教學(xué)啦

Kotlin IO

IO流很簡(jiǎn)單,掌握幾個(gè)概念用起來就沒問題了:字節(jié)流 字符流 InputStream OutputStream

新任務(wù)是下載apk,并進(jìn)行安裝;現(xiàn)在后臺(tái)未開發(fā),先做一個(gè)模擬下載。把文件放在raw文件夾中,通過IO流傳輸?shù)轿募小?/p>

注意:1.IO操作為耗時(shí)操作,不能放在主線程

示例

先寫一個(gè)獲取要輸出的文件方法

/**
     * 獲取外部存儲(chǔ)地址
     */
    private fun getExternalStorageDirectory(): File {
        //  獲取外部存儲(chǔ)地址
        val externalDir = Environment.getExternalStorageDirectory().let {
            File(it, resources.getString(R.string.app_name)).apply {
                mkdirs()
            }
        }

        return if (externalDir != null && externalDir.exists()) {
            // 獲取應(yīng)用的外部媒體文件目錄
            externalDir
        } else {
            // 獲得文件存放路徑,一般存放一些需要長期保留的文件
            // /data/data/<application package>/files目錄
            filesDir
        }
    }

寫入到文件中

 /**
     * 寫入apk到文件中
     */
    private fun writeApkToPackageByByte() {
        //獲取文件的輸入流
        val inputStream = resources.openRawResource(R.raw.a2)

        //
        val outUnderDirectory = getExternalStorageDirectory()

        val file = File(outUnderDirectory, "app.apk")
        if (!file.exists()) {
            file.createNewFile()
        }

        try {
            val fos = file.outputStream()
            inputStream.copyTo(fos)
            fos.close()
            inputStream.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

其中使用了kotlin的拓展方法,源碼如下

public fun InputStream.copyTo(out: OutputStream, bufferSize: Int = DEFAULT_BUFFER_SIZE): Long {
    var bytesCopied: Long = 0
    val buffer = ByteArray(bufferSize)
    var bytes = read(buffer)
    while (bytes >= 0) {
        out.write(buffer, 0, bytes)
        bytesCopied += bytes
        bytes = read(buffer)
    }
    return bytesCopied
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容