编程语言中IO流的使用

什么是IO流

java的io是实现输入和输出的基础,都在java.io.*包下。

流(stream)是一种有顺序的,有起点终点字节集合

IO流的分类:

按照流的方向区分: 节点流,输入流(往内存中去)、输出流(内存中出来)
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流

按照读取数据方式区分: 处理流,字节流字符流
java.io.Reader 字符输入流
java.io.Writer 字符输出流

注意: 在java中只要"类名"以Stream结尾的都是字节流。以"Reader/Writer"结尾的都是字符流。其实一切都是字节流,没有字符流这个东西,字符只是根据编码集对字节流翻译之后的产物。

java.io包下需要掌握的流

常用的节点流

  • 文件流(FileInputStream/FileOutputStrean/FileReader/FileWriter)
    文件进行处理的节点流,

  • 字符串(StringReader/StringWriter)
    对字符串进行处理的节点流

  • 数组流(ByteArrayInputStream/ByteArrayOutputStream/CharArrayReader/CharArrayWriter)
    对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组),也可以叫内存操作流。

  • 管道流(PipedInputStream/PipedOutputStream/PipedReaderPipedWriter)
    对管道进行处理的节点流

常用处理流

  • 缓冲流(BufferedInputStrean/BufferedOutputStream/BufferedReader/BufferedWriter)
    增加缓冲功能,避免频繁读写硬盘

  • 转换流(InputStreamReader/OutputStreamReader)
    实现字节流和字符流之间的转换

  • 数据流(DataInputStream/DataOutputStream)
    提供将基础数据类型写入到文件中,或者读取出来

流的关闭顺序

  • 一般是:先打开的后关闭,后打开的先关闭。
  • 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。
  • 可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。

内存操作流

注意:当我们不需要持久化存储数据,而仅仅是需要进行数据中转的时候,就可以使用内存流。例如组装一个可变长度的字节数组。

ByteArrayOutputStream是byte类型的数组进行自动扩容的。
ByteArrayOutputStream缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。

此处评论已关闭