Java中的转换流InputStreamReader

InputStreamReader是字节通向字符的桥梁,它使用指定的charset读取字节并将其解码为字符。也就是可以指定编码表。
OutputStreamWriter是字符转向字节。

OutputStreamWriter可使用指定的charset,将要写入流的字符编码成字节。

Writer父类的方法都可以使用。
构造方法:OutputStreamWriter(OutputStream,编码方式);
使用步骤
1:创建OutputStream对象,构造方法中传递字节输出流和指定的编码表名称。
2:使用OutputStream对象的write方法,把字符转换为字节存储到缓冲区中。
3:使用OutputStreamWriter对象的方法flush刷新,把内存缓冲区中的字节刷新到文件。

public class OputSWriter {
     
	public static void main(String[] args) throws IOException, FileNotFoundException {
     
		OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\图片\\c.txt"),"GBK");//写入的字节指定编码格式
		opsw.write("你好");//把字符转换为字节,可以显示中文了。
		opsw.flush();
	}
}

InputStreamReader读取指定字符格式的字符。

public class IputSReader {
     

	public static void main(String[] args) throws IOException, FileNotFoundException {
     
		// TODO Auto-generated method stub
		InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\图片\\c.txt"),"utf-8");//读取指定格式的字符
		int len = 0;
		while((len=isr.read())!=-1) {
     
			System.out.println((char)len);
		}
		isr.close();
	}
}

注意:如果又写又读, 写入和读取的编码格式不一样就会发生乱码。
就像上面写入的是GBK格式,但是读的时候用的是utf-8格式,就会出现读出乱码。

但是我们如果想转换编码格式,先把他读出来,然后写字节想转换的编码格式。比如读入GBK格式,写出utf-8格式。

public class Exercise {
     

	public static void main(String[] args) throws IOException {
     
		// TODO Auto-generated method stub
		show();
	}
	public static void show() throws IOException, IOException {
     
		InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\图片\\c.txt"),"GBK");
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\图片\\d.txt"),"UTF-8");
		int len = 0;
		while((len=isr.read())!=-1) {
     
			osw.write(len);
			System.out.println(len);//我们发现读入的是GBK格式,但是新的文件中写入的是utf8格式
		}
		isr.close();
		osw.close();
		System.out.println("over");
	}
}

你可能感兴趣的:(java)