在Kotlin中IO库基本分为两类:
字符输入输出流:Reader,Writer |负责对char的处理
字节输入输出流:InputStream,OutputStream | 负责对byte的处理
链接机制:流处理器之间可以相互关联起来,其中一个的输出作为另一个的输入。
1.输入输出流结构
InputStream原始处理器下的链接处理器:
- ByteArrayInputStream
- FileInputStream
- ObjectInputStream
- StringBufferInputStream
- …
OutputStream原始处理器下的链接处理器:
- ByteArrayOutputStream
- FileOutputStream
- ObjectOutputStream
- …
2.下面是读写结构
Reader:
- BufferedReader
- CharArrayReader
- InputStreamReader
- StringReader
- …
Weiter:
- BufferedWriter
- CharArrayReader
- OutputStreamWriter
- PrintWriter
- StringWriter
- …
读取文件与写入文件:
//写入
fun fwr(path: String) {
with(File(path).writer()) {
BufferedWriter(this).apply {
this.write("addText")
close()
this@with.close()
}
}
}
//读取
fun fre(path: String) {
with(File(path).reader()) {
val br = BufferedReader(this)
var text = br.readLine()
while (text != null) {
println(text)
text = br.readLine()
this.close()
br.close()
}
}
}
序列化与反序列化
/**
* 序列化
*/
fun seriza(needString: String) {
val f = File(needString)
if (!f.exists()) {
f.createNewFile()
}
//打开f文件输出流
val fStream = FileOutputStream(f)
try {
ObjectOutputStream(fStream).apply {
writeObject(Iwh("li", "19"))
close()
}
} catch (e: Exception) {
println(e.toString())
} finally {
fStream.close()
}
}
/**
* 反序列化
*/
fun unseriza(s: String): Iwh? {
val f = FileInputStream(s)
var objectIwh: Iwh? = null
ObjectInputStream(f).apply {
objectIwh = this.readObject() as Iwh
println("反序列化:${objectIwh!!.age}")
}
return objectIwh
}
class Iwh(val nam: String, val age: String) : Serializable