IO流
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流相关的知识,希望对你有一定的参考价值。
使用IO
- 使用时,捕获异常
- 使用后,finally中释放资源
字节流
FileInputStream read()一次读取一个字节,结束标记是-1
FileOutputStream
FileOutputStream(String name,boolean appand)的构造方法写出数据实现数据的追加写入
FileOutputStream在创建对象的时候是如果没有这个文件会创建出来,如果有这个文件就先将文件清空
write()一次写出一个字节
自定义读取数组长度,read()返回数组的长度,如果第二次读数据长度比自定义数组小,则会覆盖前面,留下后面的,输出会导致错误,调用包
含数组长度的方法可避免以上。
如果忘记加arr,返回的就不是读取的字节个数,而是字节的码表值
BufferedInputStream和BufferOutputStream
BufferedInputStream
- BufferedInputStream内置了一个缓冲区(数组)
- 从BufferedInputStream中读取一个字节时,BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个程再次读取时, 就不用找文件了, 直接从缓冲区中获取
- 直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
BufferedOutputStream
- BufferedOutputStream也内置了一个缓冲区(数组)
- 程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
- 直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里
flush和close方法的区别
- lush()方法 用来刷新缓冲区的,刷新后可以再次写出
- close()方法,用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出
字符流
- BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
- BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率
- readLine()和newLine()方法)
- BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
- BufferedWriter的newLine()可以输出一个跨平台的换行符号"\\r\\n"
字节流和字符流的相互转换
- 从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现,可以手动设置编码方式。
- 从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。
以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章