前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin源码阅读——IO

Kotlin源码阅读——IO

原创
作者头像
Runhwguo
发布2018-09-22 17:44:43
9750
发布2018-09-22 17:44:43
举报

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档