JavaIO——转换流、字符编码

1、转换流

转换流是将字节流变成字符流的流。

OutputStreamWriter:将字节输出流转换成字符输出流。

public class OutputStreamWriter extends Writer

提供的构造方法:

     public OutputStreamWriter(OutputStream out)

InputStreamReader:将字节输入流转换成字符输入流。

public class InputStreamReader extends Reader

提供的构造方法:

     public InputStreamReader(InputStream in)

/*
 * 字节流与字符流的转化
 * */
public class Test2{
	public static void main(String[] args) throws IOException {
		String singal = File.separator;
		//1.根据文件路径创建File对象
		File file = new File("C:"+singal+"Users"+singal+"lenovo"+singal+"DeskTop"+singal+"Test.txt");
		if(!file.getParentFile().exists()) {
			file.getParentFile().mkdirs();
		}
		OutputStream outputStream = new FileOutputStream(file);
		//字节流转化成字符流
		Writer writer = new OutputStreamWriter(outputStream);
		String string = "有点淡淡的忧伤";
		writer.write(string);
		writer.close();
	}
}

                          

这种操作在实际开发中并没有多么大的意义,我们主要用来分析FileOutputStreamFileInputStreamFileWriterFileReader之间的继承关系。

       

该类继承是典型的装饰者设计模型

优点:灵活,被装饰者可灵活组装需要的类。

缺点:类结构复杂,含有大量的其他类。

2、字符编码

1、常用的字符编码

(1)GBKgb2312:描述的是中文编码,其中gb2312中只含有简体中文,而GBK中可包含有繁体中文。

(2)UNICODE编码:是java语言中的默认编码,16进制编码,支持世界上所有语言的编码,缺点就是占用的内存过大,会造成网络传输的负担。

(3)UTF-8:支持所有的语言,通用编码。

(4)ISO8859-1:国际通用拜编码,不支持中文,浏览器页面默认使用此编码。

2、乱码分析:

要对乱码进行分析首先我们应该先明确的知道当前操作系统上使用的是什么编码(java默认编码):

public class Test2{
	public static void main(String[] args) throws UnsupportedEncodingException, IOException {
		//查看当前系统的字符编码(可以发现采用GBK编码)
		System.getProperties().list(System.out);
		OutputStream outputStream = new FileOutputStream("G:\\lemon\\testIO\\TestIO.java");
		//向文件中写入下列内容,并转化成ISO8859-1编码格式
		outputStream.write("hello你好!".getBytes("ISO8859-1"));
		outputStream.close();
	}
}

                

通过结果可以发现,出现了乱码,正是因为ISO8859-1不支持中文编码,所以导致有中文的地方出现了乱码。所以我们可以得出下列结论:

    乱码产生的原因:编码与解码的字符编码不一致。




posted @   edda_huang  阅读(272)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示

目录导航