文章目录

  • 1. 什么时候使用转换流
  • 2. 方法介绍
    • 2.1 将控制台输入写入文件中
    • 2.2 将文件中内容显示到控制台
  • 3. 常见编码表
    • 3.1 编码字节测试
  • 4. 指定编码读取
    • 4.1 转换流--读
    • 4.2 转换流--写

1. 什么时候使用转换流

  1. 什么是转换流?

    • 转换流,相当于字符和字节流之间的 “桥梁”
  2. 数据源是字节流,或者底层框架返回的字节流数据,但是操作的数据是,纯文本数据,可以使用转换流。
  3. 操作纯文本需要具体的编码指定时,字节流字符流处理不了编码问题,只有转换流是为了解决字符流编码问题。

2. 方法介绍

  1. 主要进行编码的转换,用来解决字符流读写乱码的问题。

    • String charsetName 是指定字符集(即编码)。
 1.OutputStreamWriter: 写出:1.1 OutputStreamWriter(OutputStream out,String charsetName);  1.2 OutputStreamWriter(OutputStream out);2.InputStreamReader: 读取:2.1 InputStreamReader(InputStream in)2.2 InputStreamReader(InputStream in,String charsetName);

2.1 将控制台输入写入文件中

  1. 键盘输入信息,保存到磁盘中。

    • 键盘输入的是 System.in 字节流。
    • 遇到指定的字符停止输入。
public static void main(String[] args) throws IOException {//1.控制台输入的是 字节流 System.in//  字节流-->字符流 , 当输入ok时,停止下来。try( BufferedReader br =new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw =new BufferedWriter(new FileWriter("D://a.txt"));){String line;while((line=br.readLine())!=null){//判断if ("ok".equals(line)){break;//跳出}bw.write(line);bw.newLine();//换行bw.flush();//刷新}}}

2.2 将文件中内容显示到控制台

  1. 将文件中的内容显示到控制台上。

    • 键盘输入的是 System.in 字节流。
public static void main(String[] args) throws IOException {//将读取的字符流转换为字节流输出到控制台   字符流-->字节流try( BufferedReader br = new BufferedReader(new FileReader("D://a.txt"));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out))){String line;while((line=br.readLine())!=null){bw.write(line);bw.newLine();bw.flush();}}}

3. 常见编码表

  1. 编码表最主要的作用,就是随着计算机不断的发展,解决各个国家因字符集不同而出现的乱码问题。

    • 如: io读写。
编码 说明 编码范围 字节量
ASC-II 英文,标点,基本指令 0到127 单字节
ISO-8859-1 ASC-II扩展,西欧字符 128~255 单字节
ANSI ANSI是一种字符编码规范,设计为了使计算机支持更多语言,英文用单字节编码,其他字符用双字节编码CJK表示亚洲字符编码的统称(中日韩)
GBK 中国国标码 最大65535 英文使用单字节,中文使用双字节
UNICODE 统一码Java的char类型字符 就采用Unicode编码 100万+编码位,分为常用字符表,生僻字符表等,我们只是用常用表 常用字符表所有字符都采用双字节
UTF-8 Unicode传输格式Unicode Transformations Format为了解决Unicode英文字符字节量翻倍的问题,提出的一种变长的编码格式 UTF是unicode传输格式 英文单字节,某些字符双字节,中文三字节,一些特殊符号四字节

3.1 编码字节测试

  1. 测试编码占字节。

    • 注意,getBytes()需要抛异常。
public static void main(String[] args) throws UnsupportedEncodingException {String s= "你好8";//编码占字符大小System.out.println(s.getBytes().length);//获取默认编码System.out.println(s.getBytes("UTF-8").length); //数字1个,汉字占3个System.out.println(s.getBytes("GBK").length);//数字1个 汉字 2个System.out.println(s.getBytes("unicode").length);//双字节,一个汉字3个,字符2个System.out.println(s.getBytes("iso-8859-1").length);//单字节,占1个。}

4. 指定编码读取

4.1 转换流–读

  1. 当需要指定编码读取的时候就需要转换流 。
  2. 如果你设置与打开一致则不需要。
    • 乱码通常是汉字乱码, 字母和数字不会乱码,因为早期编码集都将字母与数字收录在其中。
  3. 一定要注意:同编码,同解码。
    • 即:数据源如果是UTF-8,就需要使用UTF-8去读。
/**创建一个a.txt 内容: 你好java编码格式 UTF-8 a就相当于源文件。
*/public static void main(String[] args) {File file = new File("D://a.txt");//例如:a.txt编码格式为UTF-8编码try {method1(file);} catch (IOException e) {e.printStackTrace();}}/*** 测试读* @param file*/private static void method1(File file) throws IOException {// 读取文件使用的是 Gbk编码读取BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));String line;while((line=br.readLine())!=null){System.out.println(line); //会乱码 ---浣犲ソjava}}

4.2 转换流–写

  1. 往文件中写入数据。

    • 要求,不同编码。
  2. 字节流处理不了编码问题,转换流是为了解决字符流编码问题。
    • 相当于: 字节流 = 字符流+编码集。
  public static void main(String[] args) {File file = new File("D://a.txt");//例如:a.txt编码格式为UTF-8编码try {method2(file);} catch (IOException e) {e.printStackTrace();}}/*** 测试写* @param file*/private static void method2(File file) throws IOException {BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"ISO-8859-1"));bw.write("你好,中国");bw.write("123");bw.write("io");bw.close();}}

Java入门 第十三节(二)IO流转换流相关推荐

  1. 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)

    Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...

  2. 【26天高效学习Java编程】Day22:Java中的属性集-缓冲流-转换流-序列化流详解

    本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...

  3. Java基础(十五)IO流---字符流(Reader、Writer)、字节流(InputStream、OutputStream)

    IO流(应用广泛) 1.概念与三要素 本质是一套用于数据传输的机制 分类: 根据传输的方向(参照物–内存) 输入流:往内存传输数据 输出流:从内存往外传输数据 根据数据传输方式: 字符流:底层以字符形 ...

  4. Java基础---认识IO流---字节流、字符流---缓冲流---转换流

    一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...

  5. java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )

    目录 一.IO 流的结构体系 二.缓冲流:BufferedInputStream & BufferedOutputStream 三.对象流:ObjectInputStream & Ob ...

  6. java基础—IO流——转换流的操作

    转换流的使用 转换流:     InputStreamReader:字节到字符的桥梁,解码.     OutputStreamWriter:字符到字节的桥梁,编码 import java.io.Buf ...

  7. java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类

    目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...

  8. IO流-转换流-Java

    InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流.比如,如下场景 System.in是字节流对象,代表键盘的输入,如果想按行接受用户的输入时,就必须 ...

  9. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流

    第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...

最新文章

  1. 谷歌砸出10亿美元,要为湾区困难群众,建2万套经适房
  2. SettingsPLSQLDeveloper
  3. 编辑器FreeTextBox升级至3.0
  4. C#基础 基本语法4
  5. node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
  6. 当众讲话第二章当众讲话的基本原则
  7. [Ahoi2013]连通图
  8. 125_Power BI 中 DAX 的性能测试
  9. jQuery源码研究分析学习笔记-jQuery.fn.init()(五)
  10. 怎样设计访谈提纲_用户调研报告如何做?访谈-整理-报告?
  11. head first java 03 ( 6 章 )
  12. windows中的一个小bug
  13. svn up 更新与回退
  14. session依赖cookie,如果浏览器禁用了cookie呢?
  15. OpenCasCade网格的显示
  16. Transact-SQL语言
  17. Cisco 防火墙 SSH配置
  18. 微信小程序开发者工具及官网
  19. 监督学习、无监督学习、半监督学习、弱监督学习、强化学习
  20. 简述计算机键盘上shift键的作用,电脑Shift键作用大全

热门文章

  1. html5图片与文字垂直对齐
  2. 瑞芯微rk356x板子快速上手
  3. 文件下载成excel
  4. 【1191】流感传染
  5. 【Java基础】JDBC
  6. 来自一个入行三年半的大数据练习生自述
  7. PyEcharts——地图-数据可视化-画图
  8. C语言 | 输入一些字符,直到输入“#”为止
  9. 怎么查看自己的电脑IP地址?
  10. 招远一职专计算机专业都学什么,招远一职专计算机专业技能指导教师李欣经