在Java对流的读取是下面的那样,当前不要忘记流的关闭close。

// java 代码
void someFunc(InputStream in, OutputStream out) throws IOException {
int read;
while ((read = in.read()) != -1) {
out.write(read);
}
}

但是在kotlin中等式不是一个表达式,所以不能那样子写,kotlin是这样的使用的,有几种写法:
在使用流或者数据库之类的资源需要关闭close的情况下,可以使用use扩展函数来实现自动关闭的操作

第一种写法,文艺青年:
通过闭包返回来实现

fun someFunc(`in`: InputStream, output: OutputStream) {
try {
var read: Int = -1
`in`.use { input ->
output.use {
while ({ read = input.read();read }() != -1) {
it.write(read)
}
}
}
} catch (t: Throwable) {
t.printStackTrace()
}
}

第二种写法,二逼青年:

通过正常写法来实现

fun someFunc(`in`: InputStream, output: OutputStream) {
try {
var read: Int = `in`.read()
`in`.use { input ->
output.use {
while (read != -1) {
it.write(read)
read = input.read()
}
}
}
} catch (t: Throwable) {
t.printStackTrace()
}
}

第三种写法,优秀青年:

通过使用also扩展函数来实现

fun someFunc(`in`: InputStream, output: OutputStream) {
try {
var read: Int = -1
`in`.use { input ->
output.use {
while (input.read().also { read = it } != -1) {
it.write(read)
}
}
}
} catch (t: Throwable) {
t.printStackTrace()
}
}

我们来看一下also函数是什么样的:

also函数,传入一个拉姆达并且调用,拉姆达的参数是调用also的实例,然后返回实例,很好理解,就是哪个调用的就返回哪个,并且将它传入拉姆达里面。

举个栗子:

data class User(val name: String, val age: Int)

fun getMain() {
val userOut = User("jowan", 25)
println(userOut.also {
println("also---$it") // 这里的it表示什么,同时打印什么
}) // 这里会打印什么
}
9
打印什么应该猜到了吧!!

转载于:https://www.cnblogs.com/vana/p/10903341.html

kotlin实现流读取相关推荐

  1. idea 文件流读取web-inf下的文件_C#初学者教程系列20:Stream流读写

    本文是C#初学者简单教程,这是第20篇.感谢观看,记得关注我,后续还有更多教程文章,谢谢. 本文环境为Visual Studio 2019. 一.介绍 在C#文件操作中,通常使用流来读取和写入文件.流 ...

  2. java 文件流读取文本_如何在Java 8中处理流和读取文本文件

    java 文件流读取文本 我已经使用最新的Java8转换了一个旧的实用程序类. 我经常使用它来打印清单文件的内容,以检查任何神秘的jar文件的版本等.只需运行" java ztools.Pr ...

  3. C++中使用流读取数据 ifstream

    C++中使用流读取数据 ifstream https://www.cnblogs.com/hjj-fighting/p/10429178.html

  4. 字符流读取,乱码问题

    碰到问题,字符流读取文本文件,读取输出,强转成char出现乱码问题. 题目 用流统计文本文件的字符个数 public static int getSum() {int count = 0;Buffer ...

  5. 【转】为什么不能使用字符流读取非文本的二进制文件?

    读取文件 刚学Java的IO流部分时,书上说只能使用字节流去读取图片.视频等非文本二进制文件,不能使用字符流,否则文件会损坏.所以我就一直记住这一点了,但是为什么不能使用,这一直是我的一个疑惑.今天, ...

  6. IO流读取文件用户信息根据年龄排序后,写到文件

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java ...

  7. c++文件流读取一行_「软帝学院」Java挑战者专栏:IO流详解2

    软帝学院笔记Day18 IO流(字符流FileReader) 1.字符流是什么 字符流是可以直接读写字符的IO流 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符 ...

  8. Java中使用字符流读取UTF-8和写出txt文件 乱码 问题

    乱码问题一直都是非常难受的问题,本文解决Java中使用字符流读取UTF-8和写出txt文件 乱码 话不多说,直接上图 输出结果: 使用代码: 解决:

  9. Java File文件流读取文件夹内的文件并替换文件内容

    Java File文件流读取文件夹内的文件并替换文件内容 一.前言 二.代码 三.运行结果 一.前言 批量读取文件夹内的文件,并替换各个文件的内容 二.代码 新建一个普通 Java 项目就可以,创建文 ...

最新文章

  1. 【相机标定】四个坐标系之间的变换关系
  2. RDKit | 基于RDKit绘制黑白颜色的分子
  3. 修改oralce字符集
  4. 学习C++之父的最新姐妹作笔记2
  5. linux多线程学习设置线程调度权限
  6. MAX10 ADC的一些基知识
  7. oracle form执行后左上角没出现oracle标记,oracle form学习笔记
  8. 关于映射的一些理解与常见命题
  9. oracle怎么删除存储,删除Oracle分区存储是一个怎样的过程?
  10. 【免费下载】2021年9月热门报告盘点(附热门报告列表及下载链接)
  11. ajax----serialize()方法注意事项
  12. Firefox关闭最后一个标签页时不关闭Firefox的设置
  13. 以变制变——前端动态化代码保护方案探索
  14. BOM offset client scroll
  15. MySQL(18)-----表类型(存储引擎)的选择
  16. jq ajax异步上传文件,jQuery Ajax上传文件
  17. 5个最受欢迎的大数据可视化软件
  18. Js关于光标对象与定位插入图片
  19. echarts 生成 迁徙图_Echarts世界级迁徙图
  20. 电子书籍检索下载很好的网站推荐

热门文章

  1. Lync 2010的点击呼叫设置
  2. 精彩十年(2)——阴沟里也翻船
  3. gridview 动态数据操作
  4. Struts 2杂谈(2):如何向标签文件中的Struts 2标签传递参数值
  5. SPL 关联优化技巧
  6. 读写分离的适用场景(转载)
  7. ZooKeeper available but no active master location found
  8. Method Not Allowed一例
  9. Micro-CMS v2(持续更新中)
  10. MetaException(message:Hive Schema version 3.0.0 does not match metastore's schema version 1.2.0 Meta