作者:创世魂
● 流对象说明
流对象的概念和作用:
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称。
即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
流对象的分类:
根据处理数据类型的不同分为:字符流和数据流。
1、在火山中“XX写出流”或“XX读入流”都属于字符流。
2、“XX输入流”或“XX输出流”都属于数据流。
流对象的作用:
在程序实际开发过程中,对应不同的数据需要用不同的流来进行操作。
1、操作文件,可能会用到“文件输入/出流”。
2、操作字节数组,可能要用“字节数组输入/出流”。
总之要根据当前程序情况,选择合适的流对象。
下面将列举一些实例,来讲解流对象应该如何使用。
● 写出流说明:
如果要创建本对象,请用当前类中的创建方法进行。
注意:如果不使用本对象后一定要记着关闭。
注意2:在火山中XX写出流,都是本类的子类。
● 创建文件写出流
“创建文件写出流”帮助文档:
顾名思义,通过本方法可创建一个文件写出流,文件路径由“参数1”决定。
如果文件不存在会自动创建,如果文件存在,可通过“参数2”来决定是否追加内容。
创建后返回“写出流”对象,创建失败返回空对象。
“添加文本”帮助文档:
顾名思义,给当前“写出流”对象添加指定文本。
添加成功返回真,否则返回假。
“关闭”帮助文档:
顾名思义,通过本方法可关闭当前流对象。
注意:如果不使用当前对象后,务必调用本方法进行关闭,且关闭后无法进行任何其他行为的操作。
代码编写如下图:
1、定义类型为“写出流”的变量并勾选参考。
2、调用“创建文件写出流()”方法创建当前流对象,并赋值给定义的变量。
3、调用“添加文本()”方法进行文本数据添加。
4、不使用当前对象后进行关闭操作。
运行结果如下图(GIF):
“按钮1”被点击后会提示“添加文本成功”。
此时打开文件管理器,会在存储卡根目录内看到当前创建的文件。
由此可见,本例程等同于调用了“写出文本文件()”方法,只不过本例程是通过流对象创建的。
● 写出字符
帮助文档如下图:
通过本方法可写出一个字符到“写出流”对象中。
写出成功返回真,失败返回假。
注意:每个字母,汉字,数字均代表一个字符。
代码编写如下图:
本实例的重点是学习“文本到字符串().取字符(0)”方法的应用,通过此方法可将“文本”转换成“字符”。
注意:不使用流对象后,务必要调用“关闭()”方法。
运行结果如下图(GIF):
“按钮1”被点击后会提示“写出字符成功”。
从文件管理器打开“1.txt”文件,文件内就会看到写出的字符内容。
● 写出字符数组
以上两个方法的作用都是用来写出字符数组到流对象中,此处举例“写出字符数组()”方法。
帮助文档如下图:
通过本方法可写出字符数组到“写出流”对象中。
写出成功返回真,失败返回假。
代码编写如下图:
通过“文本到字符数组()”方法可将“文本”转换成“字符数组”。
随后调用“写出字符数组()”方法即可将其写出。
运行结果如下图(GIF):
“按钮1”被点击后会提示“写出字符数组成功”。
从文件管理器打开“1.txt”文件,文件内就会看到写出的字符内容。
● 写出文本
以上两个方法的用法和“添加文本()”方法一致,参考添加文本方法即可。
● 本类说明
本类继承了“写出流”可使用写出流的所有方法。
本类的主要作用:针对字符数组进行写出流操作。
● 创建
“创建”帮助文档:
顾名思义,通过本方法可创建一个“字符数组写出流”对象。
本方法只有一个参数,用来设置缓冲区尺寸,如对尺寸无特殊要求,留空即可。
“到字符数组”帮助文档:
通过本方法可将当前流对象内存储的内容转换成字符数组。
代码编写如下图:
1、定义类型为“字符数组写出流”的变量,并调用“创建()”方法赋值给此变量。
2、通过“写出流”对象中的“添加文本()”方法可对当前流对象写入内容。
3、调用“到字符数组()”方法转换成字符数组,可通过“字符数组到文本()”方法重新将其转换为文本。
运行结果如下图:
“按钮1”被点击后,代码中输入的文本内容会出现在编辑框中。
● 写到流
帮助文档如下图:
简单来说,本方法可以将当前流对象的内容放到指定流对象中,类似于复制。
参数1:填写要操作的“字符数组写出流”对象,如果是通过变量调用本方法,则本参数忽略。
参数2:填写目标“写出流”对象,只要是继承了“写出流”的类,都可以填在本参数中。例如:字符数组写出流。
参数3:如果不想判断写出状态,本参数为空即可。
代码编写如下图:
1、创建“字符数组写出流”对象,起名“流对象1”,并添加一段文本数据。
2、再次创建一个“字符数组写出流”对象,起名“流对象2”。
3、通过“流对象1”调用“写出流()”方法,将其内容写入到“流对象2”中。
4、最后从“流对象2”中读取内容。
运行结果如下图:
“按钮1”被点击后,代码中输入的文本内容会出现在编辑框中。
● 取缓冲区尺寸
帮助文档如下图:
顾名思义,通过本方法可取出当前缓冲区的尺寸。
但是取出的尺寸并非创建流对象时的尺寸,而是流对象内容的尺寸。
代码编写如下图:
1、创建“字符数组写出流”对象,起名“流对象”,设置缓冲区尺寸为100。
2、添加一串文本到流对象中。
3、取出缓冲区尺寸,显示在编辑框中。
运行结果如下图:
“按钮1”被点击后,可看到当前缓冲区尺寸为“4”,证明并非创建时的尺寸。
● 重置
帮助文档如下图:
通过本方法可重置流对象的缓冲区。
代码编写如下图:
在上一个方法的基础上,增加本方法测试结果。
运行结果如下图:
最终取出缓冲区尺寸为0,证明流对象被重置。
● 本类说明
本类继承了“写出流”可使用写出流的所有方法。
本类的主要作用:高效写出。
● 创建
帮助文档如下图:
顾名思义,通过本方法可创建一个“缓冲写出流”对象。
参数1:填写基于的“写出流”对象。
参数2:填写缓冲区尺寸。
代码编写如下图:
1、创建一个文件写出流对象,起名“写出流对象”。
2、创建缓冲写出流对象,将“写出流对象”放到“创建()”方法的参数中。
3、此处添加文本后需要调用“写出缓冲()”方法,保证内容被成功写出到文件中。
4、关闭两个流对象。
运行结果如下图(GIF):
提示“添加成功”后,打开文件管理器就会看到写出的文件。
● 写出换行
帮助文档如下图:
顾名思义,调用本方法等同于使用了“\n”换行符。
添加成功返回真,失败返回假。
代码编写如下图:
在上一个方法代码的基础上,增加本方法。
运行结果如下图(GIF):
提示“添加成功”后,打开写出的文件,会发现文本被换行。
● 本类说明
本类继承了“写出流”可使用写出流的所有方法。
本类的主要作用:可用于打印格式文本数据。
注意:此类并不能连接打印机。
● 创建
前四个创建方法,都是用于创建当前“打印写出流”对象,此处演示“创建2”方法。
“创建2”帮助文档:
通过本方法可创建当前打印写出流对象。
参数1:填写要保存的文件路径,如果文件存在会进行覆盖操作。
参数2:可通过“文本编码”类中定义的常量值调用。
“打印数据”帮助文档:
顾名思义,通过本方法可打印数据到本地文件中,支持所有类型的数据打印。
注意:如果要检查是否打印成功,需要调用“检查错误()”方法。
“检查错误”帮助文档:
本方法用于检查打印方法是否执行错误。
返回真表示执行错误,执行正确返回假。
代码编写如下图:
1、调用“创建2”方法,创建当前“打印写出流”的对象。
2、调用“打印数据()”方法,可随意打印“整数”,“小数”或“文本”等各种类型数据。
3、最后调用“检查错误()”方法检查打印结果。
运行结果如下图(GIF):
提示“数据写出成功!”后,打开文件管理器就可以看到写出的文件。
● 打印换行
帮助文档如下图:
调用本方法就等同于使用“\n”换行符。
代码编写如下图:
在上一个方法代码的基础上,增加本方法做测试。
运行结果如下图(GIF):
最终结果可看到,文本文件中的数据被换行。
● 打印格式数据
帮助文档如下图:
通过本方法可打印“格式文本”数据到指定文件中。
参数1:要操作的打印流对象。
参数2:填写要操作的“格式文本”。
参数3:可自由扩展,填写任意类型数据。
代码编写如下图:
1、创建当前打印写出流对象。
2、调用“打印格式数据()”方法,打印数据。
3、最后检查是否打印成功。
运行结果如下图(GIF):
● 本分类说明
本分类说明:
本分类共两个对象,分别为“管道写出流”和“管道读入流”对象。
主要作用:用于多线程之间的通信,可通过“管道写出流”发送数据,“管道读入流”接收数据。
以上两个类在使用中有以下注意事项:
1、本管道写出/读入对象是线程安全的,不会出现线程冲突的情况。
2、千万不要在一个线程内同时使用这两个管道对象。
3、两个管道对象,只能一方连接另一方,不可双方互联,也不可一方连多方(例如:一个写出管道连接多个读入管道。)
4、使用完毕之后,请及时调用“关闭”来关闭掉这两个管道对象.
下面将写一个示例程序讲解具体通信实现过程。
● 示例程序讲解
代码编写(1):
1、首先在成员变量中定义两个线程类,分别起名“多线程1”和“多线程2”。
2、随后定义类型为“管道写出/读入流”的变量,起名“读入管道”和“写出管道”,并给“写出管道”勾选参考。
代码编写(2):
3、“按钮1”被点击后,通过“管道写出流.创建(读入管道)”方法,创建“写出管道”对象。
4、分别将两个线程对象启动。
代码编写(3):
判断“多线程1”被启动后:
5、通过“写出管道.写出文本()”方法可向读入管道发送数据。
6、不使用“写出管道”后,调用“关闭()”方法关闭当前对象。
判断“多线程2”被启动后:
7、定义“读入长度”整数变量,用于判断数据是否读入完毕。
8、定义“字符[10]”结果字符变量,用于存储接收到的数据(注意:成员数必须大于接收数据)。
9、循环判断“读入长度”的数值是否不等于-1,从而执行“读入管道.读入文本()”方法。
“读入文本()”帮助文档:
参数1:要操作的流对象,动态调用时本参数省略。
参数2:管道接收到的数据,存放在本参数内。
参数3:起始读取位置。
参数4:读取字符数量,不能大于定义的“字符数组”成员数量。
参数5:留空即可。
10、执行“读入文本()”方法的目的,是为了将返回值赋值给“读入长度”变量,从而使“判断循环()”进行循环执行读取。
11、利用“字符数组到文本()”方法可将定义的“结果字符”变量转换成文本显示。
12、关闭读入管道流对象,至此利用管道流在线程中发送数据编写完毕。
运行结果如下图:
● 本类说明
本类的主要作用就是用来进行数据读入操作。
所有的“XX读入流”都是基于本类,不使用本对象后注意关闭。
● 创建字符数组读入流
“创建字符数组读入流”帮助文档:
顾名思义,通过字符数组创建当前对象,失败返回空对象。
“读入字符”帮助文档:
通过本方法可读取当前流对象内的一个字符,返回当前字符代码,如果返回-1表示读取完毕。
字符代码:字符的一种表现形式,可通过“(字符)具体字符代码”将字符代码强制转换成“字符”类型。
注意:第一次调用读取流对象中第一个字符,第二次调用读取第二个字符,以此类推。
“关闭”帮助文档:
不使用当前对象后,务必调用本方法关闭。
代码编写如下图:
1、定义类型为“读入流”的变量,起名“流对象”并勾选参考。
2、通过“创建字符数组读入流()”方法创建本对象,赋值给“流对象”变量。
3、定义“返回结果”整数变量,用于循环判断结果值是否等于-1,从而实现循环读取字符。
4、在循环语句内再次判断“返回结果”是否不等于-1,用于防止字符多读。
5、将字符代码转换成文本显示在编辑框中。
6、最后关闭本对象。
运行结果如下图:
● 创建文件读入流
“创建文件读入流”帮助文档:
通过本方法可从一个文件创建“读入流”对象,创建失败返回空对象。
“读入文本”帮助文档:
调用本方法可读取一段文本,读取的文本将存放在参数2的“结果字符数组”中。
参数3、4:用于指定要读取的其实位置和读取字符数目。
如果本方法返回-1,表示应读取完毕。
代码编写如下图:
只需要在上一个方法代码的基础上简单修改即可。
1、调用“创建文件读入流()”通过存储卡的指定文件创建当前对象。
2、增加类型为“字符[1]”的结果字符变量,用于存储读取结果。
3、循环方法内调用“读入文本()”方法,一个字符一个字符的读取到“结果字符”中。
4、利用“字符数组到文本()”方法将字符数组转换成文本显示在编辑框中。
5、最后关闭当前对象。
运行结果如下图:
“按钮1”被点击后,文件的内容就会被读取到编辑框中显示。
● 创建文本内容读入流
帮助文档如下图:
本方法顾名思义,可通过文本创建一个读入流对象,失败返回空对象。
代码编写如下图:
在上一个方法的基础上将“创建文件读入流()”换成“创建文本内容读入流()”方法即可,其余代码保持不变。
运行结果如下图:
“按钮1”被点击后,文本内容就会被读取到编辑框中显示。
● 标记
“标记”帮助文档:
顾名思义,做一个标记,需要时可跳转到本标记位置。
参数2的作用:后续读入多少个字符后,本标记失效。
“跳转到标记”帮助文档:
顾名思义,跳转到最后一次标记位置。
“是否支持标记(读)”帮助文档:
通过本属性可判断当前流对象是否支持标记,返回真表示支持,否则不支持。
代码编写如下图:
1、通过“创建文本内容读入流()”创建当前流对象。
2、定义“返回结果”整数变量,用于读取返回值。
3、读入一个字符后,判断当前对象是否支持标记,如果支持则调用“标记()”方法标记位置。
4、再次读入一个字符后,调用“跳转到标记()”方法跳转到指定位置。
5、重新读入一个字符后关闭当前对象。
运行结果如下图(GIF):
最后可看到编辑框中显示了两个“文”,证明“标记()”和“跳转到标记()”方法都执行成功。
● 跳过
帮助文档如下图:
顾名思义,通过本方法可跳过指定字符数,返回跳过的字符数量。
如果跳过失败则返回-1。
代码编写如下图:
1、通过“创建文本内容读入流()”创建当前流对象。
2、调用“跳过()”方法跳过4个字符后,调用“读入字符()”读取一个字符。
3、最后关闭当前对象。
运行结果如下图(GIF):
最终结果,编辑框内显示“容”,证明前四个字符被成功跳过。
● 本类说明
本类继承了“读入流”可使用读入流的所有方法。
本类的主要作用:用于高效读取数据。
● 创建
“创建”帮助文档:
通过指定“读入流”创建当前对象,失败返回空对象。
“读入一行”帮助文档:
顾名思义,通过本方法可读入一行文本,失败将返回空对象。
代码编写如下图:
1、通过“创建文本内容读入流()”创建“读入流对象”。
2、随后利用“读入流对象”创建“缓冲读入流”对象。
3、调用“读入一行()”方法读取一行文本,显示在编辑框中。
4、关闭两个流对象。
运行结果如下图:
最终结果,读取了一行文本显示在编辑框中。
● 本类说明
本类继承了“读入流”和“缓冲读入流”可使用这两个类的所有方法。
本类的主要作用:获取当前读入行的行号。
● 创建行号读入流
“创建行号读入流”帮助文档:
通过指定“读入流”创建当前对象,失败返回空对象。
参数1:提供要创建行号读入流的“读入流”对象。
参数2:如无特殊需求留空即可。
“取当前行号”帮助文档:
通过本方法可读取当前行的行号。
注意:行号从0开始。
代码编写如下图:
1、通过“创建文本内容读入流()”创建“读入流对象”。
2、随后利用“读入流对象”创建“行号读入流”对象。
3、调用“取当前行号()”和“读入一行()”获取行号和文本显示在编辑框中。
4、关闭两个流对象。
运行结果如下图:
最终结果,行号和文本成功读取。
● 本类说明
本流对象继承了“输入流”可使用输入流的所有方法,因输入流不能直接创建对象,因此用本类做演示。
本类的主要作用:以流的方式对文件进行操作。
● 创建
“创建”帮助文档:
通过指定“文件路径”创建当前对象,失败返回空对象。
“读入数据”帮助文档:
通过本方法可读取对象中存储的文件数据,读取成功返回实际读取的字节数,否则返回-1。
参数1:提供要操作的输入流,通过变量调用本方法是,本参数省略。
参数2:提供字节数组缓冲区,用于存放读取到的文件数据。
参数3、4:提供起始位置和读取字节数。
参数5:提供读取的状态对象,如果不想使用本参数,填写空对象即可。
注意:本方法继承自“输入流”。
代码编写如下图:
1、通过“创建()”创建“文件输入流”对象。
2、定义类型为“字节[]”的缓冲数组变量,成员填写1024,此变量的作用用于临时存放读取到的文件数据。
3、定义“返回结果”整数变量,用于判断“读入数据()”是否读取成功。
4、循环判断“返回结果”是否不等于-1,如果不等于就调用“文件流.读入数据()”方法,并将结果显示在编辑框中。
5、最后关闭本对象。
运行结果如下图:
最终结果,文本文件的内容读取成功。
● 创建缓冲流
“创建缓冲流”帮助文档:
通过本方法可创建“缓冲输入流”对象,目的用于快速高效读取数据,失败返回空对象。
注意:“缓冲输入流”同样继承自“输入流”可使用输入流的所有方法。
“读入指定尺寸数据”帮助文档:
本方法可“读入数据()”方法类似,不同之处为,本方法返回值为逻辑型,用于判断是否读取成功。
注意:如果缓冲字节数组成员数大于要读取的数据,则本方法会返回假。
代码编写如下图:
1、通过“文件输入流.创建缓冲流()”方法创建“缓冲输入流”对象,起名缓冲流。
2、定义类型为“字节[]”的缓冲数组变量,成员填写3,此变量的作用用于临时存放读取到的文件数据。
3、定义“返回结果”逻辑变量,用于判断“读入数据()”是否读取成功。
4、最后将读取结果显示在编辑框中,并关闭本对象。
运行结果如下图(GIF):
最终结果,成功读取一个汉字显示在编辑框中。
● 标记位置
帮助说明:
● 本类说明
本类继承自“输入流”可使用输入流的所有方法。
创建本对象,必须使用本对象提供的创建方法。
本类的主要作用:对字节数组进行流操作。
● 创建
以上两个方法都是用于创建当前字节数组输入流对象,不同之处为“创建2”可以设置起始位置和数据尺寸。
此处举例“创建()”方法。
帮助文档如下图:
通过本方法可创建当前字节数组输入流对象,失败返回空对象。
参数1:提供创建当前对象的字节数组。
代码编写如下图:
1、调用“创建()”方法创建当前对象。
2、定一个“缓冲数组”变量,调用“读入数据()”方法读取流对象中的数据显示在编辑框中。
3、最后关闭当前对象。
提示:如果要读取的字节数据较多,参考“文件输入流.读入数据()”方法中判断循环的用法。
运行结果如下图(GIF):
最终结果,成功将数据显示在编辑框中。
“管道输入/出流”的主要作用也是用于线程之间的通信和“管道读/写流”的用法一致。
具体操作实现流程,直接参考“管道读/写流”即可。
● 本类说明
本类继承自“输出流”可使用输出流的所有方法。
本类的主要作用:用于文件写出操作。
● 创建
“创建”帮助文档:
顾名思义,通过本方法可创建当前“文件输出流”。
参数1:提供要写出的文件路径。
参数2:是否在原文件的基础上增加数据,如果留空则覆盖原文件。
“写出数据2”帮助文档:
本方法继承自“输出流”可用于写出数据。
参数1:要操作的输出流对象,通过变量调用本方法时,本参数省略。
参数2:准备写出的字节数组数据。
参数3:写出状态保存在此参数中,留空则为空对象。
写出成功返回真,失败返回假。
“写出缓存”帮助文档:
本方法的作用可保证流对象的数据被正常写出。
注意:本方法继承自“输出流”。
“关闭”帮助文档:
顾名思义,关闭当前对象。
注意:本方法继承自“输出流”。
代码编写如下图:
1、通过“创建()”创建当前流对象。
2、调用“写出数据2()”方法写出一段数据到流对象中,并判断是否写出成功。
3、调用“写出缓存()”用来保证数据被成功写出到文件中。
4、最后关闭当前对象。
运行结果如下图(GIF):
“按钮1”被点击后,打开文件管理器可看到被写出的文件。
● 本类说明
本类继承自“输出流”可使用输出流的所有方法。
本类的主要作用:操作字节数组,可实现字节数组合并。
● 创建
“创建”帮助文档:
顾名思义,通过本方法可创建当前“字节数组输出流”。
参数1:填写字节尺寸,如果写入的数据大于本尺寸,将自动扩充。
“取已写入数据”帮助文档:
通过本方法可将写入的字节数组合并后取出并返回。
代码编写如下图:
1、通过“创建()”创建当前“字节数组输出流”对象,尺寸分配1。
2、调用“写出数据2()”方法写出三组数据。
3、调用“取已写入数据()”取出被写出的数据显示在编辑框中。
4、最后关闭当前对象。
运行结果如下图:
最终被写出的数据将会合并显示在编辑框中。
● 取已写入文本
“取已写入文本”帮助文档:
通过本方法可直接取出当前流对象内的文本数据。
“取已写入数据尺寸”帮助文档:
本方法可取出流对象中的数据尺寸,单位字节。
代码编写如下图:
1、创建当前“字节数组输出流”对象,尺寸分配1。
2、调用“写出数据2()”方法写出三组数据。
3、调用“取已写入文本()”和“取已写入数据尺寸()”方法取出数据和尺寸,显示在编辑框中。
4、最后关闭当前对象。
运行结果如下图:
● 写到流
本方法的作用和用法可参考“字符数组写出流.写到流()”方法。
● 本类说明
本类中的方法和“打印写出流”中的方法基本一致,不同之处为本类继承自“输出流”。
下面列举一个示例来讲解如何操作。
代码编写如下图:
1、定义类型为“打印输出流”的变量并勾选参考,调用“创建2()”方法赋值给此变量。
2、调用“写出数据2()”和“打印数据()”方法写出数据到文件中。
3、最后关闭当前对象。
运行结果如下图(GIF):
最后两组数据将成功被写出到文件中。