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流的主要内容,如果未能解决你的问题,请参考以下文章

IO流之IO流综述

IO异常--缓冲流--转换流--序列化流( IO流2 )

IO流(序列流)

java中的io流都有哪些

java IO流 IO流概述

IO流