赞
踩
流:一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
IO分类:
按数据流的方向分为 输入流、输出流
按处理数据单位不同分为 字节流、字符流
按功能不同分为 节点流、处理流
IO流特性
1、先进先出,最先写入输出流的数据最先被输入流读取到。
2、顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。
3、只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。
IO流常用到的五类一接口
5个类指的是File、OutputStream、 InputStream、Writer、Reader;一个接口指的是Serializable
------------------------------------------------------------------------------------------------------------------------------------------
InputStreamReader、OutputStreamWriter(字符流)
字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。
本身就带有缓冲区,在操作时使用了缓冲区,通过缓冲区再操作文件,缓冲字符流相对于字符流效率提升不大。
FileInputStream、FileOutputStream(字节流)
字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。
本身没有缓冲区,在操作时是文件本身直接操作的,缓冲字节流相对于字节流,效率提升非常高。
------------------------------------------------------------------------------------------------------------------------------------------
(字节缓冲流)
BufferedInputStream
从BufferedInputStream中读取一个字节时,
BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个
程序再次读取时, 就不用找文件了, 直接从缓冲区中获取
直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
BufferedOutputStream
BufferedOutputStream也内置了一个缓冲区(数组)
程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里
------------------------------------------------------------------------------------------------------------------------------------------
(字符缓冲流)
BufferedWriter:字符缓冲输出流;
该字符缓冲输出流中提供了一个跨平台的换行符:newLine()。如果想要在硬盘上创建一个文件并写入一些文字数据的话,就可以使用该类
write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
BufferedReader:字符缓冲输入流。
该字符缓冲输入流提供了一个一次读一行的方法:readLine()。方便于对文本数据的获取,当返回null时,表示读取到文件末尾。
read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
阻塞问题:用BufferedReader缓冲流,在传输数据时在服务端使用readline()读取时,一直读取不到,使用debug发现,readline是发生了阻塞
如果字符串不加\n readline方法将一直阻塞 而read方法则不会出现阻塞的情况
原因:readLine()方法返回的时候只返回回车符之前的数据内容,并不返回回车符(行终止符)。
------------------------------------------------------------------------------------------------------------------------------------------
字节流,字符流的区别
字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。
字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。
说白了是,字节流可以处理一切文件,而字符流只能处理纯文本文件。如果数据通过记事本软件打开,我们还可以读懂里面的内容,就使用字符流,否则使用字节流。如果不知道到底要用那种类型的流,就用字节流
字节流本身没有缓冲区,在操作时是文件本身直接操作的,缓冲字节流相对于字节流,效率提升非常高。
字符流本身就带有缓冲区,在操作时使用了缓冲区,通过缓冲区再操作文件,缓冲字符流相对于字符流效率提升不大。
----------------------------------------------------------------------------------------------------------
缓冲区的原理
临时存储数据,减少了对设备操作的频率,提高了效率,其实就是将数据临时缓存到了内存(数组)中。
----------------------------------------------------------------------------------------------------------------
File:
demo02:在指定目录下创建各种文件
demo03:返回绝对路径,返回目录下的文件名,目录名
demo04:删除目录下的各种文件目录
demo05、demo06、demo17:创建文件输出流以指定的名称写入文件。FileOutputStream write函数
demo07:(跟上面那个一类)字节流换行,写入开头或结尾
demo08:字节输入流 读取字节数据 FileInputStream read函数
demo09:复制文本文件
demo10,demo16:读取字节 数组 数据
demo11:复制图片
demo18:复制内容改进版 ---字符流---
demo20:复制内容字符缓冲
demo15:OutputStreamWriter(字符流)写入字符、字符数组、字符数组的一部分、字符串、字符串的一部分
demo19:统计字符出现的次数(但是我觉得考核项目那个更好,好像前几天还保存了一个!!!!!)
注意!!!前方高能!
缓读缓写:demo12
(字节缓冲流)
BufferedOutputStream
BufferedInputStream
最快的方法:缓冲加数组读取
字符流!!!
demo18:FileReader FileWriter
demo20:复制内容字符缓冲
demo21:字符缓冲输入输出流 复制文本
统计:
最佳!demo22 统计字符数到另一个文件中
demo20 统计字符数到另一个文件中
java0017 统计字符数到输出栏中
flush()方法和close()方法区别:
flush()方法
用来刷新缓冲区的,刷新后可以再次写出
close()方法
具备刷新功能,在关闭流之前,会先刷新一次缓冲区,将缓冲区的字节全部刷新到文件上,再关闭
用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。