美文网首页
一个IO流apk传输示例

一个IO流apk传输示例

作者: 微风细雨007 | 来源:发表于2020-12-07 16:29 被阅读0次

推荐文章:

一文带你看懂JAVA IO流,史上最全面的IO教学啦

Kotlin IO

IO流很简单,掌握几个概念用起来就没问题了:字节流 字符流 InputStream OutputStream

新任务是下载apk,并进行安装;现在后台未开发,先做一个模拟下载。把文件放在raw文件夹中,通过IO流传输到文件中。

注意:1.IO操作为耗时操作,不能放在主线程

示例

先写一个获取要输出的文件方法

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

        return if (externalDir != null && externalDir.exists()) {
            // 获取应用的外部媒体文件目录
            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
}

相关文章

  • 一个IO流apk传输示例

    推荐文章: 一文带你看懂JAVA IO流,史上最全面的IO教学啦[https://zhuanlan.zhihu.c...

  • Java输入输出流

    IO流 IO流用来处理设备之间的数据传输,传输是通过流的方式Java用于操作流的对象都在java.io包中流就是指...

  • 文件的读写操作(Java版)

    IO的类型传输方向:输入流、输出流。传输内容:字节流、字符流:字节流可以传输任何文件,字符流只能传输文本文件。功能...

  • Java复习之IO流(上)

    IO流(Input Output ),即输入输出。 IO流:IO流用于处理设备间的数据传输(内存和硬盘之间)。IO...

  • java中IO流详细解释

    [TOC] IO流 IO流概述及其分类 IO概念 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的...

  • IO流

    IO流 使用IO流技术读取文件的内容数据。 IO流解决问题: 解决设备与设备之间的数据传输问题。 内存--->硬...

  • 【Java基础】- IO流

    IO流简介 IO流 用于设备间进行数据传输的操作。 IO流可以分为字节流和字符流,也可以分为输入流和输出流。 字符...

  • 2020-07-02 IO流

    IO流概述 IO:输入/输出 流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是...

  • FileWriter、FileReader

    1. 【应用】IO流概述及FileWriter类使用 a. 【了解】能够阐述IO流的作用 数据的传输、java对数...

  • 最全IO流解析——IO流的骚操作

    Java中是通过流的方式对数据进行操作,用于操作流的类都在IO包中,IO流用来处理设备之间的数据传输。IO流按照流...

网友评论

      本文标题:一个IO流apk传输示例

      本文链接:https://www.haomeiwen.com/subject/ndizwktx.html