1、转换流

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

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

public class OutputStreamWriter extends Writer

提供的构造方法:

public OutputStreamWriter(OutputStream out)

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

public class InputStreamReader extends Reader

提供的构造方法:

public InputStreamReader(InputStream in)


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

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

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

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

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

2、字符编码

1、常用的字符编码

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

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

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

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

2、乱码分析:

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


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

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

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

最新文章

  1. NiceMark——我的Markdown编辑器
  2. Android Studio的SVN Performing VCS Refresh/Commit 长时间不结束
  3. 我用ANDROID STUDIO开发,页面上总包这个警告,很烦!网上说是sdk版本问题,但是我是基于25开发的,最小版本也是19,有没有老司机啊?3克油
  4. css3 缓动公式
  5. 关于RPC
  6. CSS中font-style的斜体属性Italic oblique的区别
  7. 在Linux-0.11中实现基于内核栈切换的进程切换
  8. Python 基础 (单、双引号区别) 不断补充
  9. RegExp对象的三个方法
  10. Beta冲刺 第一天
  11. IIS处理并发请求设置
  12. springmvc 项目完整示例08 前台页面以及知识点总结
  13. 腾讯云CDN python SDK
  14. 10: vue-router和单文件组件
  15. python3自学第二天,模块,三元运算
  16. Vue slot简单理解
  17. 【pyqt5】QdateTimeEdit(日期时间)
  18. 日尼玛(。・∀・)ノ゙嗨 关于使用netstat时:::*
  19. python实现文件加密
  20. 01-消息中间件概述和ActiveMq入门

热门文章

  1. k8s入坑之路(5)kube-apiserver详解
  2. Linux 服务器的基本性能及测试方法
  3. elementUI合并表格span-method用法
  4. go的变量、常量以及判断变量的数据类型
  5. appium环境搭建基于安卓(mac系统)
  6. install virtualenv without sudo
  7. 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑
  8. Effective C++ 总结笔记(二)
  9. 1组-Alpha冲刺-3/6
  10. 菜鸡的Java笔记 日期操作类