美文网首页
Kotlin - 实现流写入到File

Kotlin - 实现流写入到File

作者: ZHDelete | 来源:发表于2019-10-18 23:10 被阅读0次

转自: Kotlin 中实现流的读取的方法
https://www.jianshu.com/p/31ce8caefa25


我们知道java中IO操作是一份很重要的知识点,运用IO知识可以完成许多使用的操作,在Java中,提供了许多方法来进行流的读写操作,但是Kotlin 中呢?要怎么写呢?恰巧今天写Kotlin页面的时候遇到了,在Java 中很普通甚至普遍的写法,在Kotlin 中居然一直是报错的状态:

FileOutputStream fos = new FileOutputStream(file);
           BufferedInputStream bis = new BufferedInputStream(is);
           byte[] buffer = new byte[1024];
           int len;
           int total = 0;
           while ((len = bis.read(buffer)) != -1) {
               fos.write(buffer, 0, len);
               total = total + len;
               //获取当前下载量
               pd.setProgress((total / 1024));
           }
           fos.close();
           bis.close();
           is.close();
           return file;

其中 while ((len = bis.read(buffer)) != -1) {}在java 中的写法是非常普遍的,但是到了Kotlin 中呢?
就是这个样子:

 val fos = FileOutputStream(file)
        val bis = BufferedInputStream(`is`)
        val buffer = ByteArray(1024)
        val len: Int
        var total = 0
        while ((len = bis.read(buffer)) != -1) {
            fos.write(buffer, 0, len)
            total = total + len
            //获取当前下载量
            pd.progress = total / 1024
        }
        fos.close()
        bis.close()
        `is`.close()
        return file

其中while ((len = bis.read(buffer)) != -1)会疯狂提示错误! 意思是说参数是不被允许的,what?怎么会这样呢,百度了一下,原来Kotlin 中等式不是一个表达式,这种写法是不被允许的,所有只有选择其他方法了,后来发现了Kotlin中的also扩展函数对,就是这货,用这货写就可以了:

            while (((bis.read(buffer)).also { len = it }) != -1) {
                fos.write(buffer, 0, len)
                total += len
                //获取当前下载量
                pd.progress = total / 1024
            }
            fos.close()

所以现在这种就是很好的写法了,运行起来跟java中的效果是一样的。
最后,没事多学习,有空多挣钱,新的一年,大家继续努力

相关文章

  • Kotlin - 实现流写入到File

    转自: Kotlin 中实现流的读取的方法https://www.jianshu.com/p/31ce8caefa...

  • Kotlin和Java转化

    Java转kotlin Code-->Convert Java File to Kotlin File kotli...

  • 第九讲 文件操作

    File 输入和输出流是相对于内存来说的:写入内存叫做输入流,从内存写到文件叫输出流。

  • Scrapy 输出路径问题记录

    上面的代码无法写入到磁盘,需要修改成下面的,加上file:///协议就可以写入硬盘

  • JAVA -----文件操作

    File文件操作: 创建文件 向文件写入数据-字节流 向文件写入数据-字符流 向文件里面存一个对象序列化 seri...

  • python 文件I/O

    一、文件file 1、方法涉及到file的创建、打开、写入、读取、关闭 2、属性包括名称、是否已关闭、模式 #!/...

  • mysql的innodb_flush_log_at_trx_co

    一、参数解释 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁...

  • kotlin数据流读取

    最近在用kotlin写一个copy assets文件到sd卡的操作时,发现kotlin下文件写入的神奇之处,特此记...

  • Kotlin I/O 与文件管理(4)文件管理

    File 类扩展函数案例:读取目录文件   在 Kotlin 中如果只是对文件进行操作,可以不直接使用文件流。Ko...

  • 翻译:CFNetwork编程指南(二)——使用流(Working

    本文讨论如何创建、打开和检查读写流错误。它还描述了如何从读取流读取信息,如何从写入信息到写入流,如何在读取或写入流...

网友评论

      本文标题:Kotlin - 实现流写入到File

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