kotlin实现流读取
在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
打印什么应该猜到了吧!!
kotlin实现流读取的更多相关文章
- java HttpServletRequest 重复流读取
在用reset接口的时候,常常会使用request.getInputStream()方法,但是流只能读取一次,一旦想要加上一个过滤器用来检测用户请求的数据时就会出现异常. 在过滤器中通过流读取出用 ...
- 多次使用图片物理路径提示占用进程,用流读取设置FileShare权限解决
//用流读取图片 清空之后再次关联地址 //设置FileShare.ReadWrite权限之后 不会提示占用进程异常 item是物理路径DiscussionImageList = new Interv ...
- java HttpServletRequest 重复流读取
在用reset接口的时候,常常会使用request.getInputStream()方法,但是流只能读取一次,一旦想要加上一个过滤器用来检测用户请求的数据时就会出现异常. 在过滤器中通过流读取出用 ...
- java IO流读取图片供前台显示
最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...
- 转-servlet 获取 post body 体用流读取为空的问题
目前基于rest风格的很多API开始使用通过body data来传输来代替之前的key-value传输方式.在Java servlet或者springmvc中可以通过如下代码来获取并图片通过流方式传输 ...
- IO字 节流/字符流 读取/写入文件
流是指一连串流动的数据信号,以先进,先出的方式发送和接收的通道 流的分类根据方向分为输入流所有接收,获得,读取的操作都是属于输入流所有的输入流名字都带有input或Reader 输出流所有发送,写的操 ...
- java 文件及流读取
在Java语言的IO编程中,读取文件是分两个步骤:1.将文件中的数据转换为流,2.读取流内部的数据.其中第一个步骤由系统完成,只需要创建对应的流对象即可,对象创建完成以后步骤1就完成了,第二个步骤使用 ...
- io流读取文件
package test; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import ...
- Java使用对象流读取文件的问题
把对象进行持久化(把对象存到本地)要用到对象流进行处理,在用对象流处理过程中,在写对象和读对象时候遇到了很多问题,分享一下. 我们处理对象数据的时候不可能只处理一个对象,在系统运行的时候,可能产生的对 ...
随机推荐
- MySQL性能优化(六):分区
原文:MySQL性能优化(六):分区 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...
- 剑指offer-数组中只出现一次的数字-数组-python
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. # -*- coding:utf-8 -*- class Solution: # 返回[a, ...
- 关于NGINX在wnidows下面和linux下面的多站点的反向代理的配置
原创文章,转载注明出处 nginx作为一款优秀的反向代理软件,以其好用,易于搭建负载均衡的网站集群而著称,这里分别记录一下工作中用到nginx作为负载以及多站点发布的时候一些配置和注意事项 一 ng ...
- springboot日志框架学习------slf4j和log4j2
springboot日志框架学习------slf4j和log4j2 日志框架的作用,日志框架就是用来记录系统的一些行为的,可以通过日志发现一些问题,在出现问题之后日志是好的一个帮手. 市面上的日志框 ...
- JDBC1
---恢复内容开始--- create table `account` ( `id` ), `name` ), `balance` ) ); insert into `account` (`id`, ...
- 访问gitlab从http方式改为ssh方式,gitlab使用的不是标准22端口
设置步骤:1,本地进入.ssh查看是否存在密钥对:xxx和xxx.pub命令:cd ~/.ssh2,如果不存在,使用ssh-keygen来创建命令:ssh-keygen -t rsa -C " ...
- 框架之一:mybatis
同时加载驱动包 mysql+mybatis 创建bean对应的mapper接口bookMapper package com.imu.mzw.mapper; import java.util.List; ...
- automake中Makefile.am和configure.ac的格式及编译过程
step1:写Makefile.am step2:执行autoscan,会生成configurae.scan,修改configure.scan内容之后,命名为configure.ac step3:执行 ...
- HTTP与TCP的区别和联系(转)
https://www.cnblogs.com/baizhanshi/p/8482612.html
- pidstat 命令详解(转载)
转自https://www.jianshu.com/p/3991c0dba094 pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu.内存.线程.设备I ...