前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java IO (13) -- InputStreamReader 类 & OutputStreamWriter 类

Java IO (13) -- InputStreamReader 类 & OutputStreamWriter 类

作者头像
用户7886150
修改2021-04-25 17:45:47
2420
修改2021-04-25 17:45:47
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Java OutputStreamWriter类

文章目录

 1. 概念2. 字段1. InputStreamReader2. OutputStreamWriter

   3. 方法1. 构造器1. InputStreamReader2. OutputStreamWriter

    2. 其他方法1. InputStreamReader2. OutputStreamWriter

   4. 案例

1. 概念 

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

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

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

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

2. 字段 

1. InputStreamReader 

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

2. OutputStreamWriter 

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

3. 方法 

1. 构造器 

1. InputStreamReader 

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

2. OutputStreamWriter 

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

2. 其他方法 

1. InputStreamReader 

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

2. OutputStreamWriter 

public String getEncoding():获取字符编码方式public void write(int c):将单个字符写到流中public void write(char cbuf[], int off, int len):将字符数组cbuf中,off位置开始,len个字符写到流中public void write(String str, int off, int len):将字符串str中,off位置开始,len个字符写到流中public void flush():刷新流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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档