4.7.2 InputStreamReader和OutputStreamWriter
java.io包中用于处理字符流的最基本的类,用来在字节流和字符流之间作为中介。
◇ 生成流对象
public InputStreamReader(InputStream in);
/*in是字节流,而InputStreamReader是字符流,但是其来源是字节流in,
因此InputStreamReader就可以把字节流in转换成字符流处理。/*
public InputStreamReader(InputStream in,String enc) throws UnsupportedEncodingException;
/*enc是编码方式,就是从字节流到字符流进行转换时所采用的编码方式,
例如 ISO8859-1,UTF-8,UTF-16等等*/
public OutputStreamWriter(OutputStream out);
/*out是字节流,而OutputStreamReader是字符流 */
public OutputStreamWriter(OutputStream out,String enc) throws UnsupportedEncodingException; //enc是编码方式
InputStreamReader和OutputStreamWriter的方法:
◇ 读入和写出字符
基本同Reader和Writer。
◇ 获取当前编码方式
public String getEncoding();
◇ 关闭流
public void close() throws IOException;
4.7.3 BufferedReader和BufferedWriter
◇ 生成流对象
public BufferedReader(Reader in); //使用缺省的缓冲区大小
public BufferedReader(Reader in, int sz); //sz为缓冲区的大小
public BufferedWriter(Writer out);
public BufferedWriter(Writer out, int sz);
◇ 读入/写出字符
除了Reader和Writer中提供的基本的读写方法外,增加对整行字符的处理。
public String readLine() throws IOException; //读一行字符
public void newLine() throws IOException; //写一行字符
【例4-4】
import java.io.*;
public class NumberInput{
public static void main(String args[]){
try{
InputStreamReader ir;
BufferedReader in;
ir=new InputStreamReader(System.in);
//从键盘接收了一个字符串的输入,并创建了一个字符输入流的对象
in=new BufferedReader(ir);
String s=in.readLine();
//从输入流in中读入一行,并将读取的值赋值给字符串变量s
System.out.println("Input value is: "+s);
int i = Integer.parseInt(s);//转换成int型
i*=2;
System.out.println("Input value changed after doubled: "+i);
}catch(IOException e)
{System.out.println(e);}
}
}
运行结果
| D:\>java NumberInput 123 Input value is 123 Input value changed after doubled: 246 |
注意:在读取字符流时,如果不是来自于本地的,比如说来自于网络上某处的与本地编码方式不同的机器,那么我们在构造输入流时就不能简单地使用本地缺省的编码方式,否则读出的字符就不正确;为了正确地读出异种机上的字符,我们应该使用下述方式构造输入流对象:
ir = new InputStreamReader(is, "8859_1");
采用ISO 8859_1编码方式,这是一种映射到ASCII码的编码方式,可以在不同平台之间正确转换字符。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页