文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性 在 init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...Hello.kt:11) at HelloKt.main(Hello.kt) Process finished with exit code 1 上述代码在编译时 , 没有报错 ; 二、问题分析 ---- 从...初始化 角度分析 上述代码的执行顺序 , Kotlin 类 对象在实例化 时会执行一系列的 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 中属性赋值 类中的属性赋值 init 初始化块 中的代码执行...再后 , 执行 init 初始化块 , 其中先执行 nameFirstLetter 函数 , 在该函数中调用了 fun nameFirstLetter() = name[0] 中的 name 属性 ,...init 初始化代码块中进行初始化 , 但是在初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ; 三、解决方案 ---- 调换 初始化代码块 中的代码顺序 , 先给 name
1.I/O介绍 这篇主要就是介绍Kotlin中的I/O流的使用,相较于Java上的I/O使用,Kotlin中要简洁不少。 I:Input 输入的意思。O:Output 输出的意思。...在Kotlin中,将数据的输入和输出操作称为流,这里的流是一组有序的数据序列,像河流一样流动的。 通常统称输入输出为I/O。 2. 字节与字符流 针对流的输入输出,根据数据的格式分为字节流和字符流。...Kotlin是基于Java的,所以在Kotlin中字节和字符流就是java中的字节和字符流。 字节流列表: 所有Input和Output都是成对出现的,一个负责输出,一个负责输入。...两者是成对出现的,我们在使用过程中也是成对的进行 3. 基础函数 从上面的表格中,可以得出有很多的输入输出,那么我们在实际使用过程中从哪里进行入手呢?从基类进行入手。...在Kotlin中针对这两个基础抽象类进行了不少的封装,可以方便我们快速使用。相关封装在kotlin.io.ByteStreamsKt.class中可以看到。 针对上面的函数进行简单的说明一下。
另外像图片等二进制格式的文件,可通过字节数组的形式写入文件,Kotlin提供了writeBytes方法用于覆盖写入字节数组,也提供了appendBytes方法用于追加字节数组。...这几个方法理解起来毫不费力,从文件中读取全部的文本,也只要下面一行代码便成: //读取文件的文本内容 val content = File(file_path).readText() 若想从图片文件中读取位图信息...该办法确实可行,因为Android的位图工厂BitmapFactory刚好提供了decodeByteArray函数,用于从字节数组中解析位图,具体代码如下所示: //方式一:利用字节数组读取位图... //readBytes读取字节数组形式的文件内容 val bytes = File(file_path).readBytes() //decodeByteArray从字节数组解析图片...获取文件的输入流对象 val fis = File(file_path).inputStream() //decodeStream从输入流解析图片 val bitmap = BitmapFactory.decodeStream
这两个类都属于底层流,而我们在实际开发中为了提高效率有时会选择BufferedInputStream和BufferedOutputStream带有缓冲流的IO类。...那么数据只是缓冲在内存中。还没有复制存储到新文件中。 注意:copyTo函数将输入流复制到输出流,只有当流关闭的时候数据才会被写入到文件中。否则文件大小一直为0。...该扩展函数存储在kotlin.io.FilesKt.class类中。 //读的一些常见函数 //字节数组的形式,返回文件的内容。... //写的一些常见函数 //字节数组的形式,写入文件中。...更深入的就需要我们在实际使用中进行扩展学习了
用户空间装着用户进程需要使用的资源,比如你在程序代码里开一个数组,这个数组肯定存在用户空间;内核空间存放内核进程需要加载的系统资源,这一些资源一般是不允许用户访问的。...使用Kotlin 让 Java程序员们的生活变得更好,Java中的那些空指针错误,浪费时间的冗长的样板代码,啰嗦的语法限制等等,在Kotlin中统统消失。...在 JVM 生态不断发展繁荣的过程中,也诞生了Scala、Groovy、Clojure 等兄弟语言。 Kotlin 也正是 JVM 家族中的优秀一员。...5.默认和命名参数 在Kotlin中,您可以为函数中的参数设置一个默认值,并给每个参数一个名称。这有助于编写易读的代码。...图来自《Kotlin从入门到进阶实战》 (陈光剑,清华大学出版社) ? 图来自《Kotlin从入门到进阶实战》 (陈光剑,清华大学出版社) ? https://kotlinlang.org/
Input 输入流(将外部文件读入到 Java 程序中) Output 输出流(将 Java 程序中的数据输出到外部) Java 中的流有很多种不同的分类。...InputStream 的常用方法 方法 描述 int read() 以字节为单位读取数据 int read(byte b[]) 将数据存入 byte 类型的数组中,返回数组中有效数据的长度 int read...可以使用缓冲流,缓冲流自带缓冲区,可以一次性从硬盘中读取部分数据存入缓冲区,再写入内存,这样就可以有效减少对硬盘的直接访问。 缓冲流属于处理流,如何来区分节点流和处理流? ...序列化和反序列化 序列化就是将内存中的对象输出到硬盘⽂件中保存。 反序列化就是相反的操作,从⽂件中读取数据并还原成内存中的对 象。...序列化就是将内存中的对象输出到硬盘文件中保存。 反序列化就是相反的操作,从文件中读取数据并还原成内存中的对象。
所以C程序针对⽂件、画面、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。 ...因为在C语言程序启动的时候,默认打开了3个流: • stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。...5.4 fgets char * str:传字符串存放的地址(一般是一个字符数组) int num:传从流中读取的最大字符串长度(由于字符串末尾有一个\0,所以默认其实最多读取num-1个) FILE...* stream:传需要读取的流 Get string from stream:作用是从流中获取字符串 我们可以看到,由于字符串的末尾要默认跟一个\0,所以最多只能读取num-1个到arr数组中 5.5...,从键盘上读取,而fscanf是所有的标准输入流都可以,参数可以传文件流也可以跟scanf一样传stdin(标准输入流),而sscanf是从一个字符串中读取。
一:流的概念 在Java中,把一组有序的数据序列称为流。 如a.txt的文件拷贝到b.txt中。 在Java中流是使用统一的方式操作输入和输出的数据。 从文件中读取,从键盘读取,从网络中读取......如果遇到输入流的结尾,则返回-1; b)int read(byte[] b): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。返回的整数表示读取的字节数。...如果遇到输入流的结尾,则返回-1; c)int read(byte[] b, int off, int len): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。...int available(): 返回可以从输入流中读取的字节数目; skip(long): 从输入流中跳过参数n指定数目的字节。...类提供了一系列和写数据有关的方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write(byte[] b): 把参数b指定的字节数组中的所有字节写到输流
一:流的概念 在Java中,把一组有序的数据序列称为流。 如a.txt的文件拷贝到b.txt中。 在Java中流是使用统一的方式操作输入和输出的数据。...如果遇到输入流的结尾,则返回-1; b)int read(byte[] b): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。返回的整数表示读取的字节数。...如果遇到输入流的结尾,则返回-1; c)int read(byte[] b, int off, int len): 从输入流读取若干个字节,把它们保存到参数b指定的字节数组中。...int available(): 返回可以从输入流中读取的字节数目; skip(long): 从输入流中跳过参数n指定数目的字节。...类提供了一系列和写数据有关的方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write(byte[] b): 把参数b指定的字节数组中的所有字节写到输流
那么JAVA中的IO流呢; (1).在java中,java就是自来水厂,水源地就是源,家就是目的 (2)....//对于自来水厂当做参照物来说,从水源地流到我自来水厂的水,是从外面进来的,那么水是输入进来的。(输入) 从自来水厂到家的水,是从自来水厂流出的(输出)。...对于java程序来说,也是一样的,从源地到我java中的流,便是输入流(InputStream),而从我java中流出的便是输出流(OutputStream) (3).那么你已经知道什么是输入流(InputStream...我们知道储水池有很多种类型的,那么java中的缓冲区自然也有很多种类型的,例如以下最常用的 我们已经知道的InputStream是输入流,那么BufferedInputStream就是输入流的缓冲区了...创建转换流对象 输 出流对象, 输出的编码 OutputStreamWriter osw = new OutputStreamWriter(os,“ISO-8859-1”); 以上就是IO流的简单介绍
跨平台 跨平台项目是 Kotlin 1.2 中的一个新的实验性功能,它允许开发者从相同的代码库构建应用程序的多个层——后端、前端和Android应用程序,在这个跨平台方案中,主要包含三个模块。...在Kotlin1.2版本中,使用lateinit修饰符能够用于全局变量和局部变量了,也就是说,二者都允许延迟初始化。...弃用:枚举条目中的嵌套类型 在枚举条目中,inner class由于初始化逻辑中的问题,定义一个非嵌套的类型已经被弃用了。这会在Kotlin 1.2中引起警告,并将在Kotlin 1.3中出错。...弃用:vararg单个命名参数 为了与注释中的数组文字保持一致,在命名形式(foo(items = i))中传递可变参数的单个项目已被弃用。请使用具有相应数组工厂功能的扩展运算符。...为确保与新模块系统的兼容性,Kotlin做出的另一个更改是将kotlin.reflect从kotlin-reflect库中移除。
* public void write(char[] cbuf, int off, int len) throws IOException * 将字符数组cbuf中从索引off处开始的len个字符写入输出流...* public String readLine() throws IOException * 用于从输入流中读取一行字符。 ...在java.io包中, * FilterInputStream和FilterOutputStream类是所有过滤输入流和 * 输出流的父类,它们是抽象类,本身不能生成任何实例,在这两上类 * 之下...,分别实现了几物特殊的过滤输入流和输出流,利用这些特殊输 * 入流和输出流的实例可以进行流处理。 ...代码块中对上面这些对象进行初始化,程序的目的是通过BufferedInputStream * 类对象bufInObj和BufferedOutputStream类对象bufOutObj将secondFile.txt
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116194.html原文链接:https://javaforall.cn
Kotlin数组 Kotlin集合 Kotlin数组 数组是一种初始化时指定容器大小,不可以动态调整其大小的容器。元素按顺序存储在一串连续的内存段上。...Kotlin数组创建技巧 arrayOf创建数组 创建一个数组并传递元素值给它, 集合中的元素可以是任意类型 val array = arrayOf(1, 2, 3)...Array(5) { i -> (i * i).toString() } asc.forEach { println(it) } 原生类型数组 在Kotlin中也有无装箱开销的专门的类来表示原生类型数组...数组类型不是集合中的一种,但是它又和集合有着太多相似的地方。...,下标从0开始 array.component1() … arr.component5()获取数组的前5个元素。
其他语言特性 注解中的数组常量 从 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: 数组常量语法被限制为注释参数。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以在属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...弃用:枚举项中的嵌套类型 在枚举项中,由于初始化逻辑中的问题,定义一个不是内部类的嵌套类型的功能已经被弃用。在 Kotlin 1.2 中这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:vararg 中的单命名参数 为了与注解中的数组常量保持一致,在命名的表单(foo(items = i)) 中为 vararg 参数传递的单项目已被弃用。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是将控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。
其他语言特性 注解中的数组常量 从 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: ? 数组常量语法被限制为注释参数。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以在属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...弃用:枚举项中的嵌套类型 在枚举项中,由于初始化逻辑中的问题,定义一个不是内部类的嵌套类型的功能已经被弃用。在 Kotlin 1.2 中这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:vararg 中的单命名参数 为了与注解中的数组常量保持一致,在命名的表单(foo(items = i)) 中为 vararg 参数传递的单项目已被弃用。...确保与新模块系统兼容的另一个更改是从 kotlin-reflect 库中移除 kotlin.reflect 包中的弃用声明。
题目描述:统计一个数字在排序数组中出现的次数。 这题要解决的核心问题就是:搜索数字出现的左右边界。边界的差值,就是出现次数。...解法 1: 从两边向中间 思路比较简单: 从数组左侧向右遍历,遇到目标数字 target,停止,记录下标 left 从数组右侧向左遍历,遇到目标数字 target,停止,记录下标 right 如果 right...解法 2: 二分查找(巧妙) 二分查找一般用来查找数字在有序数组中是否出现过。进一步想,它可以用来不断在子序列中搜索对应数字。...所以,我们就可以用它来向左边子序列中不断搜索,确认左边界;同样的思路,确认右边界。 这可能还是有点抽象,举个 ?。以数组 2、3、3、3、2 为例,我们要搜索数字 3 的左右边界。
,输入也叫读取数据,输出也叫写出数据 1.1 IO的分类 按照数据的流向分类:输入流与输出流 输出流:把数据从其他设备读取到内存中的流 输出流:把数据从内存中写出到其他设备上的流 格式数据的类型分...public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输 出到此输出流。...public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。...java.io.FileInputStream 类是文件输入流,从文件中读取字节。...public int read() : 从输入流读取一个字符。 public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
2.1.2 词法分析器_JetLexer JFlex会读取配置文件并生成一个词法分析器(扫描器),在Kotlin编译器中对应_JetLexer /** * This class is a scanner...在语法分析过程中,会生成语法树(ST)/抽象语法树(AST)。...在Kotlin编译器中,语义分析的工作位于org.jetbrains.kotlin.resolve模块下。 ?...举个例子: 在Kotlin中,如果我们定义如下代码: var a: Int = 1; 会等价于Java中 public Int a = 1;public Int getA(){ return a;...}public void setA(int a) { this.a = a;} 那么,在Kotlin中是怎么实现的呢,我们来看PropertyCodegen关于属性的生成部分。
这时候就涉及到了上文所讲述的数据在文件中的存储方式,将内容简化为文字就是下图所示(以10000为例): 当放入10000时实际上放入的是10011100010000这个二进制序列,在二进制文件中显示的是十六进制的数字序列...以上就是关于运行代码在VS中的二进制文件中的相关知识。 3....3.1.2 标准流 在C语言中,标准库提供了一组预定义的流,称为标准流(standard streams),它们包括标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。...标准输入流(stdin):标准输入流用于从程序外部读取数据,通常与键盘输入相关联。当你使用scanf等函数读取用户输入时,实际上是从标准输入流中读取数据。...函数 所有输⼊流 fputc 字符输出函数 所有输出流 fgets ⽂本⾏输⼊函数 所有输⼊流 fputs ⽂本⾏输出函数 所有输出流 fscanf 格式化输⼊函数 所有输⼊流 fprintf 格式化输出函数
领取专属 10元无门槛券
手把手带您无忧上云