字符流(InputStreamReader、OutputStreamWriter)
作者:互联网
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