IO转换流_字符集

字节流可以可以处理一切文件(视频、音频、图片、纯文本),所以很多框架的底层都返回字节流。但当一个文件是纯文本时,用字符流比字节流的处理效果更佳(特别是加了缓冲BufferedReader/BufferedWriter,逐行读取逐行写出)
InputStreamReader/OutputStreamWriter字符流与字节流转换的桥梁 a bridge from byte streams to character streams
解码: 字节---->字符(InputStreamReader)
编码: 字符---->字节(OutputStreamWriter)
作用(2点):
1.能将字节流转换成字符流
2.指定字符集specified charset(在解码的过程如果与源码的字符集不统一就会出现乱码,所以最好指定字符集)

Construction描述
InputStreamReader(InputStream in, String charsetName)创建使用给定字符集的 InputStreamReader
OutputStreamWriter(OutputStream in, String charsetName)创建使用给定字符集的 OutputStreamWriter

CharacterStreams -->InputStreamReader/OutputStreamWriter–>ByteStreams

Test_1:以字节流的的形式操作字节流(循环获取输入内容,并输出此内容)

  • 操作System.in和System.out(键盘的输入输出都是字符串)
public class ConvertTest{
	public static void main(String[] args) {
		try (/*不用释放*/
		/*凡使用字符串的地方都+缓冲:InputStreamReader isr = new InputStreamReader(System.in);*/
				BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));){
			String str = "";
			while(!str.equals("quit")) {/*循环读取,遇到quit终止*/
				str = reader.readLine();/*逐行读取*/
				writer.write(str);/*逐行写出*/
				writer.newLine();
				writer.flush();/*因内容较少,必须强制刷新,否则驻留在缓冲区*/
			}
		}catch(IOException e){
			System.out.println("操作异常");
		}
	}
}

Test_2:指定字符集(操作网络流[下载百度的源代码])

public static void main(String[] args) {
		try (/*不用释放*/
//				字节输入流  特别指定"UTF-8"
				BufferedReader is = new BufferedReader(/*为了处理方便加缓冲*/
										new InputStreamReader(/*InputStreamReader+"UTF-8"避免乱码问题*/
						/*节点流、网络流、字节流*/new URL("https://www.baidu.com/").openStream(),"UTF-8"));
				BufferedWriter os = new BufferedWriter(/*为了处理方便加缓冲*/
										new OutputStreamWriter(/*OutputStreamReader+"UTF-8"避免乱码问题*/
									/*输出流*/new FileOutputStream("baidu.html"),"UTF-8"));){
//				(读取)操作
				String temp;
				while(null !=(temp = is.readLine())) {
					os.write(temp);/*如果这里出现乱码,是由字符集不统一造成*/
					os.newLine();
				}
				os.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值