IO流
发布日期:2021-05-14 16:56:02 浏览次数:16 分类:精选文章

本文共 1881 字,大约阅读时间需要 6 分钟。

IO流

一、字节流

字节流用于处理文件中的各种二进制数据,如图片、音乐、视频等。下面从输入流和输出流两方面进行介绍。

输入流 InputStream抽象类

InputStream是处理字节输入的基础抽象类,其常用子类包括FileInputStream。主要方法如下:

  • int read():从输入流读取一个字节,每次读取后指针向前移动一位。
  • int read(byte[] b):从输入流读取一定数量的字节,将结果存放到字节数组b中,返回实际读取的字节数。
  • int read(byte[] b, int off, int len):从输入流读取len个字节到字节数组b的指定位置off开始。
  • 输出流 OutputStream抽象类

    OutputStream是处理字节输出的基础抽象类,其常用子类包括FileOutputStream。主要方法如下:

  • void write(int b):将指定的单个字节写入输出流。
  • void write(byte[] b):将字节数组b中的所有字节写入输出流。
  • void write(byte[] b, int off, int len):将字节数组b中的len个字节,从指定位置off开始写入输出流。
  • 二、字符流

    字符流专用于处理文本和字符串相关的流操作。字符流在读取和写入文本时可以使用指定的编码方式,避免乱码问题。

    输入流 Reader抽象类

    Reader是处理字符输入的基础抽象类,其常用子类包括FileReader。主要方法如下:

  • int read():从字符流中读取一个字符。
  • int read(byte[] b):从字符流中读取字符,将其转换为字节数组形式返回。
  • int read(char[] cbuf, int off, int len):从字符流中读取字符,将其存放到字符数组cbuf中,并指定开始位置和长度。
  • 输出流 Writer抽.abstract类

    Writer是处理字符输出的基础抽象类,其常用子类包括FileWriter。主要方法如下:

  • void write(char[] cbuf, int off, int len):将字符数组cbuf中的字符按顺序写入输出流。
  • void write(String str, int off, int len):写入字符串str中的字符,并指定开始位置和长度。
  • void append(char c):将字符c追加到输出流中。
  • 三、关流方式

    使用Java 7引入的try-with-resources语法可以更简洁地处理IO流,确保流在一定范围内自动关闭。语法如下:

    try (
    InputStream is = new FileInputStream("file.txt");
    ) {
    // 读取文件内容
    } catch (IOException e) {
    // 处理异常
    }

    四、乱码问题

    产生的原因

  • 编码和解码时使用的字符集不一致。
  • 字节流读取字符时,字节数组长度不足以容纳完整的汉字字符,导致字符损坏。
  • 解决方案

  • 在读取和写入文本文件时统一使用指定的字符集。
  • 在开发环境中统一设置默认字符集。
  • 避免直接使用字节数组读取或写入文本文件,改用字符流。
  • 编码与解码

    字符编码和解码是字符流的基础操作。使用字符流时,可以灵活指定编码方式。

    编码

    String str = new String("hello, world!", charsetName);

    选择合理的字符集asename(如UTF-8、UTF-16)进行转换。

    解码

    byte[] bytes = str.getBytes(charsetName);

    通过指定字符集名称将字符串转换为字节数组。

    转换流(包装流)

    为了更方便地读写文本文件,可以使用转换流将字节流和字符流相互包装。

    输入转换流

    InputStreamReader tiedInputStreamReader(InputStream is, String charsetName)

    通过InputStreamReader可以兼容字节流与字符流,读取文本文件时更加高效和简便。

    输出转换流

    OutputStreamWriter tiedOutputStreamWriter(OutputStream os, String charsetName)

    OutputStreamWriter同样提供了字符流与字节流之间的桥梁功能,适用于高效地写入文本文件。

    通过以上方法,可以有效避免乱码问题,并确保文件的读写顺畅。

    上一篇:Java8新特性
    下一篇:File类&递归

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月12日 18时49分47秒