package:kotlin.io
filename:Console.kt/FileTreeWalk.kt/ReadWrite.kt/FileReadWrite.kt
说起IO操作,一般会分为终端IO/网络IO/文件IO。我们也按照这个分类来聊聊Kotlin的IO源码。
先上一张Kotlin IO的源码目录结构图:
一、终端IO
控制台语句:print/println,主要在Console.kt里定义实现的。
Kotlin的原则是,Java已有的API直接用,没有或者不好用的,就通过函数扩展的方式,新增扩展。看一下Console.kt的源码:
Kotlin的print/println是直接调用Java的System.out.print等函数,所以Kotlin的print的能力是跟Java的System.out.print完全一样。
二、网络IO
将Kotlin的IO源码看了一遍,发现kotlin.io包里只给URL类新扩展了两个网络方法:
URL.readText/URL.readBytes,如图Kotlin是封装了两个好用的API,应该不难看明白,是从url里读取text/bytes,上一个demo:从url里获取text,是一个很好用的API。
三、文件IO
Kotlin中对IO的扩展,主要是这四个文件:
FileReadWrite.kt里对File类进行了很多好用的扩展,比如readText/writeText/forEachLine等,实现也都是很简单,是对Java的包装。
Demo如下:
还有files文件夹下的三个问题,都是对File提供了一些好用的API封装,其中Utils.kt里封装了一些常用的API,如图:
还有FileTreeWalk.kt提供了对文件树的遍历,对一些写脚本工具的同学来说,遍历文件数的能力是十分常用的,比如项目里的UTF-8编码检查,代码格式检查都是需要文件遍历的。
看源码文件:
构造参数有6个参数,含义很清晰,无需多说。这是最全的,Kotlin也提供了两个简单的调用方法,File.walk/File.walkTopDown/File.wakBottomUp。先写一个简单的demo:计算Kotlin源码项目有多少kt文件。
我们来进一步看一下Kotlin的FileTreeWalk的源码。
支持两种方式遍历,一是父目录到子目录,二是子目录到父目录,都是深度优先遍历DFS。
截一下遍历最关键的实现代码:
即如果遍历下一个文件的方法,用到的是DFS算法(数据结构~)。
四、Reader/Writer扩展
我们都知道java的IO体系中,Reader和Writer是所有IO读写类的最顶父类,Kotlin和Java是一脉相承,在kotlin.io包里做了一些扩展。
如图又是一些常用好用的API扩展。
Kotlin IO的源码阅读到此结束,欢迎评论交流。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。