字节流转字符流
由于字符流使用Unicode字符集,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。
一、InputStreamReader类
InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法:
InputStreamReader isr = new InputStreamReader(InputStream in);//构造一个默认编码集的InputStreamReader类
InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);//构造一个指定编码集的InputStreamReader类。
参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。
或者 InputStream in = new FileInputStream(String fileName);//读取文件中的数据。可以看出FileInputStream 为InputStream的子类。
InputStreamReader(InputStream in)//根据默认字符集创建
InputStreamReader(InputStream in,Charset cs)//使用给定字符集创建
InputStreamReader(InputStream in,CharsetDecoder dec)//使用给定字符集解码器创建
InputStreamReader(InputStream in,String charsetName)//使用指定字符集创建
主要方法:int read();//读取单个字符。
int read(char []cbuf);//将读取到的字符存到数组中。返回读取的字符数。
二、OutputStreamWriter类
OutputStreamWriter 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。
构造方法:
OutputStreamWriter osw = new OutputStreamWriter(OutputStream out);//构造一个默认编码集的OutputStreamWriter类
OutputStreamWriter osw = new OutputStreamWriter(OutputStream out,String charsetName);//构造一个指定编码集的OutputStreamWriter类。
参数 out对象通过 InputStream out = System.out;获得。//打印到控制台上。
或者 InputStream out = new FileoutputStream(String fileName);//输出到文件中。可以看出FileoutputStream 为outputStream的子类。
OutputStreamWriter(outputstream out)//根据默认的字符集创建
OutputStreamWriter(outputstream out,charset cs)//使用给定的字符集创建
OutputStreamWriter(outputstream out,charsetDecoder dec)//使用组定字符集创建
OutputStreamWriter(outputstream out,String charsetName)//使用指定字符集创建
主要方法:void write(int c);//将单个字符写入。
viod write(String str,int off,int len);//将字符串某部分写入。
void flush();//将该流中的缓冲数据刷到目的地中去。
例子:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class KeyinTest { public static void main(String[] args) { try ( //将System.in转化为Reader对象 InputStreamReader reader = new InputStreamReader(System.in); //将普通的Reader包装成BufferReader BufferedReader br = new BufferedReader(reader); ) { String buffer = null; //采用循环方式来逐行读取数据 while ((buffer = br.readLine()) != null) { //如果读取的是"exit"则程序退出 if (buffer.equals("exit")) { System.exit(1); } //打印读出的内容 System.out.println("输入的内容为:" + buffer); } } catch (IOException ioe) { ioe.printStackTrace(); } } }