当前位置: 代码迷 >> 综合 >> Java IO (13) -- InputStreamReader 类 OutputStreamWriter 类
  详细解决方案

Java IO (13) -- InputStreamReader 类 OutputStreamWriter 类

热度:6   发布时间:2023-12-16 13:25:25.0

文章目录

    • 1. 概念
    • 2. 字段
      • 1. InputStreamReader
      • 2. OutputStreamWriter
    • 3. 方法
      • 1. 构造器
        • 1. InputStreamReader
        • 2. OutputStreamWriter
      • 2. 其他方法
        • 1. InputStreamReader
        • 2. OutputStreamWriter
    • 4. 案例

1. 概念

OutputStreamWriter和InputStreamReader是字节流和字符流转化之间桥梁,OutputStreamWriter继承自Writer接口,而InputStreamReader继承自接口Reader.需要了解的一点是字符流的写入和读取的方式.

  • 字符输出流:将字符通过指定编码方式转化成字节数据,然后存储到文件中.
  • 字符输入流:读取文件的字节数据通过相同的编码方式转化成字符.不同的编码方式会造成乱码.

InputStreamReader是字节流转化成字符流的桥梁.通过给定字符编码方式或者传入指定编码方式,平台默认编码方式等将字节转化成字符读取到流中.子类有FileReader.

OutputStreamWriter是字符流转化成字节流的桥梁,通过给定字符编码方式或者传入指定编码方式,平台默认编码方式等将字符转化成字节写到流中.子类有FileWriter.

2. 字段

1. InputStreamReader

  1. private final StreamDecoder sd:负责字符解码的类StreamDecoder

2. OutputStreamWriter

  1. private final StreamEncoder se:负责字符编码的类StreamEncoder

3. 方法

1. 构造器

1. InputStreamReader

  1. public InputStreamReader(InputStream in):创建一个指定了底层字节输出流和默认字符编码方式的InputStreamReader流
  2. public InputStreamReader(InputStream in, String charsetName):创建一个指定了底层字节输出流和"指定"字符编码名称charsetName的InputStreamReader流
  3. public InputStreamReader(InputStream in, Charset cs):创建一个指定底层字节输出流和"给定"字符编码方式cs的InputStreamReader流
  4. public InputStreamReader(InputStream in, CharsetDecoder dec):创建一个 指定底层字节输出流和"给定"字符编码器dec的InputStreamReader流

2. OutputStreamWriter

  1. public OutputStreamWriter(OutputStream out, String charsetName):创建一个指定了底层字节输出流和"指定"字符编码名称charsetName的OutputStreamWriter流
  2. public OutputStreamWriter(OutputStream out):创建一个指定了底层字节输出流和默认字符编码方式的OutputStreamWriter流
  3. public OutputStreamWriter(OutputStream out, Charset cs):创建一个指定底层字节输出流和"给定"字符编码方式cs的OutputStreamWriter流
  4. public OutputStreamWriter(OutputStream out, CharsetEncoder enc):创建一个 指定底层字节输出流和"给定"字符编码器enc的OutputStreamWriter流

2. 其他方法

1. InputStreamReader

  1. public String getEncoding():获取字符编码方式
  2. public int read():从流中读取单个字符
  3. public int read(char cbuf[], int offset, int length):将流中length个字符读取到字符数组cbuf中,cbuf中从offset位置开始
  4. public boolean ready():流是否准备读取,读取缓冲区不为空或者底层输入流中可读取数据时返回true
  5. public void close():关闭流,释放相关资源

2. OutputStreamWriter

  1. public String getEncoding():获取字符编码方式
  2. public void write(int c):将单个字符写到流中
  3. public void write(char cbuf[], int off, int len):将字符数组cbuf中,off位置开始,len个字符写到流中
  4. public void write(String str, int off, int len):将字符串str中,off位置开始,len个字符写到流中
  5. public void flush():刷新流
  6. public void close():关闭流,释放相关资源

4. 案例

public class InputStreamDemo {
    public static void main(String[] args) throws IOException {
    String charsetName="UTF-8";testOutputStreamWriter(charsetName);testInputStreamReader(charsetName);}private static void testOutputStreamWriter(String charsetName) throws IOException {
    char[] cbuf = new char[] {
    'h','e','l','l','o','w','o','r','l','d'};OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:\\java.txt"),charsetName);osw.write("0123456789", 0, 8);osw.write(cbuf, 1, 6);osw.write('h');osw.close();}private static void testInputStreamReader(String charsetName) throws IOException {
    InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\java.txt"),charsetName);int read = isr.read();System.out.println("单个字符--------"+(char)read);char[] cbuf = new char[1024];isr.read(cbuf, 0, 10);System.out.println(new String(cbuf));String encoding = isr.getEncoding();System.out.println("解码方式--------"+encoding);isr.close();}
}//结果
单个字符--------0
1234567ell
解码方式--------UTF8
  相关解决方案