ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符流(InputStreamReader、OutputStreamWriter)

2022-05-24 01:31:42  阅读:129  来源: 互联网

标签:字符 OutputStreamWriter int System read InputStreamReader out


FileReader / FileWriter 只能读写与当前环境编码兼容的文件

如果读写的文件编码与当前环境编写不兼容,使用 InputStreamReader / OutputStreamWriter

InputStreamReader 可以把字节流转换为字符流,OutputStreamWriter 可以把字符流转换为字节流,这一对流类又称为转换流

流的体系结构

 

------------------------------------------

  • 看流的体系结构
  • 创建流对象 new 字符流对象(字节,编码集)
  • 字符流完成输入和输出操作

    输入:以字符为单位读取到内存(缓冲区:将字节解码为字符,读到内存中)

    输出:以字符为单位输出(缓冲区:将字符以指定编码集编码为字节,写到文件中)

  • 释放资源  colse()

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。(看构造方法)

构造方法

  • InputStreamReader(InputStream in)  创建一个使用默认字符集的 InputStreamReader
  • InputStreamReader(InputStream in, String charsetName)  创建使用指定字符集的 InputStreamReader

成员方法

  • int read()    读取单个字符。
  • int read(char[] cbuf)    将字符读入数组。
  • int read(char[] cbuf, int off, int len)    将字符读入数组的某一部分
  • String getEncoding()    返回此流使用的字符编码的名称

// InputStreamReader 可以把字节流转换为字符流 public class Test01 { public static void main(String[] args) throws IOException { //1)建立流通道使用InputStreamReader流读取hehe.txt文件内容, 该文件使用GBK编码,而当前环境使用UTF-8编码, 可以通过转换流读取指定编码的文件 //1.1 先建立字节流通道 FileInputStream fis = new FileInputStream("D:\\yexiao1793\\file\\hehe.txt"); //1.2 把字节流fis以指定的GBK编码转换为字符流 InputStreamReader reader = new InputStreamReader(fis, "GBK");  // 构2 //2)以字符为单位读取文件内容 int cc = reader.read();  // char -> int while (cc != -1 ){ System.out.print( (char)cc);  // int -> char cc = reader.read(); } //3)关闭 reader.close(); } }

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest02 {
    public static void main(String[] args) throws IOException {
        //创建一个字符输入流对象(字节输入流 + 平台默认编码集)
        //必须要保证字符输入流指定的编码集和读取的文本的编码格式是一致的,才能以字符为单位读取到正确的内容
        InputStreamReader isr = new InputStreamReader(new FileInputStream("day09\\a.txt"));

        // 以字符为单位读取文本文件
       /* int ch = isr.read();//以字符为单位读取文本内容到内存,将该方法的返回值char的数据类型,提升为了一个int类型  char -> int
        System.out.println(ch);
        System.out.println((char)ch);*/

      /* int ch;
       while ((ch = isr.read()) != -1){
           System.out.print((char) ch);
       }*/


        // 以字符数组为单位读取
       /* int len;
        char[] chars = new char[4];
    */   /*
    int num = isr.read(chars); System.out.println(num); System.out.println(Arrays.toString(chars)); int num2 = isr.read(chars); System.out.println(num2); System.out.println(Arrays.toString(chars)); int num3 = isr.read(chars); System.out.println(num3); System.out.println(Arrays.toString(chars));
    */    /* while ((len = isr.read(chars)) != -1){ System.out.print(new String(chars,0,len)); }      */ isr.close(); } }

 

标签:字符,OutputStreamWriter,int,System,read,InputStreamReader,out
来源: https://www.cnblogs.com/lwj0126/p/16304051.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有