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不支持中文编码,所以导致有中文的地方出现了乱码。所以我们可以得出下列结论:

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

JavaIO——转换流、字符编码的更多相关文章

  1. java 输入输出IO 转换流-字符编码

    编码和其产生的问题: 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果. 按照某种规则,将字符存储到计算机中,称为编码 .反之,将存 ...

  2. JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...

  3. python学习Day7 数据类型的转换,字符编码演变历程

    一.数据类型的转换 1.1.1.字符转列表:lst1 = str.split(默认空格,也可依据指定字符分界),若无分界字符,就没法拆分,这时可以直接放进list转成列表 ----> s1 = ...

  4. 批量转换文件字符编码(GBK转UTF-8)

    今天收到一份代码,拖到IDE中发现乱码,看来下编码是GBK的(

  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件

    IDEA默认的编码格式是UTF-8 新建一个txt文件.输入你好 ANSI就是系统默认编码.保存即可. 通过IDE打开是乱码的,因为默认打开的方式是UTF-8 转换为char类型 输出了乱码

  6. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  7. Java-IO流之转换流的使用和编码与解码原理

    一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...

  8. Java精选笔记_IO流(转换流、常用流、流操作规律、字符编码)

    IO流 用来处理设备之间的数据传输,java对数据的操作是通过流的方式,java用于操作流的对象都在IO包中 按操作数据分为:字节流和字符流:按流向分为:输入流和输出流. 程序从输入流中读取数据,向输 ...

  9. java 节点流(字符流,字节流)和包装流(缓冲流,转换流)

    结点流:直接对File类进行操作的文件流 package stream; import java.io.File; import java.io.FileNotFoundException; impo ...

随机推荐

  1. Linux网卡bond模式

    Bond模式 交换机配置 mode=0 balance-rr 轮询均衡模式 LACP mode on 强制链路聚合 mode=1 active-backup 主备模式 无 mode=2 balance ...

  2. 盘点 GitHub 年度盛会|附视频

    「Universe 2021」是 GitHub 于今年举办的开发者盛会,本次 Universe 2021 大会采用线上直播模式,为期两天已于上周落下帷幕. 这是 GitHub 举办的一年一度开发者盛会 ...

  3. pycharm安装指导教程

    pycharm下载安装教程 1.pycharm下载官网 http://www.jetbrains.com/pycharm/ 2.下载好安装包后双击点开安装包文件,这边以专业版为例 按以上图片所示教程, ...

  4. 手撸markdown web server

    先上效果图 在线预览 powered by kingreatwill/mdserve. markdown项目:https://github.com/kingreatwill/open 目的 经常写笔记 ...

  5. 一、spring 环境搭建

    一.springtoolSuite4下载 1.概述 Spring Tools 4 是适用于您最喜欢的编码环境的下一代 Spring 工具.它主要从头开始重建,为开发基于 Spring 的企业应用程序提 ...

  6. 1组-Alpha冲刺-3/6

    一.基本情况 队名:震震带着六菜鸟 组长博客:https://www.cnblogs.com/Klein-Wang/p/15544334.html 小组人数:7人 二.冲刺概况汇报 王业震 过去两天完 ...

  7. vue.js学习与实战笔记(1)

    公司需要开发一个小型官网,个人决定放弃angular2,使用vue来进行开发,由于是培训出生,思想一时难以转变,所以只能从零开始,下面奉上学习笔记 vue.js主要参考官网进行学习与开发 由于vue不 ...

  8. php简单手机商品发布系统

    原本还说学学angular2的,没想到上一公司呆了两月就走了,现在在这个公司做了一个小型的商品发布系统,,php实现的,比较简单,功能不多,是以手机模板发布商品网站的,需要的可以拿去 http://p ...

  9. python实现图片色素的数值运算(加减乘除)和逻辑运算(与或非异或)

    目录: (一)数值运算(加减乘除) (二)逻辑运算(与或非异或) 正文: (一)数值运算(加减乘除) opencv自带图片色素的处理函数------相加:add()   相减:subtract()  ...

  10. Go语言核心36讲(Go语言实战与应用九)--学习笔记

    31 | sync.WaitGroup和sync.Once 我们在前几次讲的互斥锁.条件变量和原子操作都是最基本重要的同步工具.在 Go 语言中,除了通道之外,它们也算是最为常用的并发安全工具了. 说 ...