Java入门 第十三节(二)IO流转换流
文章目录
- 1. 什么时候使用转换流
- 2. 方法介绍
- 2.1 将控制台输入写入文件中
- 2.2 将文件中内容显示到控制台
- 3. 常见编码表
- 3.1 编码字节测试
- 4. 指定编码读取
- 4.1 转换流--读
- 4.2 转换流--写
1. 什么时候使用转换流
- 什么是转换流?
- 转换流,相当于字符和字节流之间的 “桥梁”。
- 数据源是字节流,或者底层框架返回的字节流数据,但是操作的数据是,纯文本数据,可以使用转换流。
- 操作纯文本需要具体的编码指定时,字节流字符流处理不了编码问题,只有转换流是为了解决字符流编码问题。
2. 方法介绍
- 主要进行编码的转换,用来解决字符流读写乱码的问题。
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 将控制台输入写入文件中
- 键盘输入信息,保存到磁盘中。
- 键盘输入的是
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 将文件中内容显示到控制台
- 将文件中的内容显示到控制台上。
- 键盘输入的是
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. 常见编码表
- 编码表最主要的作用,就是随着计算机不断的发展,解决各个国家因字符集不同而出现的乱码问题。
- 如: 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 编码字节测试
- 测试编码占字节。
- 注意,
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 转换流–读
- 当需要指定编码读取的时候就需要转换流 。
- 如果你设置与打开一致则不需要。
- 乱码通常是汉字乱码, 字母和数字不会乱码,因为早期编码集都将字母与数字收录在其中。
- 一定要注意:同编码,同解码。
- 即:数据源如果是
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 转换流–写
- 往文件中写入数据。
- 要求,不同编码。
- 字节流处理不了编码问题,转换流是为了解决字符流编码问题。
- 相当于: 字节流 = 字符流+编码集。
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流转换流相关推荐
- 第十五章 IO流(转换流 字符流 字符缓冲流 打印流)
Java基础15 第十五章 IO流(转换流 字符流 字符缓冲流 打印流) 15.1 字符编码和字符集 15.1.1 字符编码 15.1.2 字符集 15.1.3 String类getBytes()方法 ...
- 【26天高效学习Java编程】Day22:Java中的属性集-缓冲流-转换流-序列化流详解
本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...
- Java基础(十五)IO流---字符流(Reader、Writer)、字节流(InputStream、OutputStream)
IO流(应用广泛) 1.概念与三要素 本质是一套用于数据传输的机制 分类: 根据传输的方向(参照物–内存) 输入流:往内存传输数据 输出流:从内存往外传输数据 根据数据传输方式: 字符流:底层以字符形 ...
- Java基础---认识IO流---字节流、字符流---缓冲流---转换流
一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...
- java:IO流(缓冲流、对象流、控制台IO、转换流、java.io.File 类 )
目录 一.IO 流的结构体系 二.缓冲流:BufferedInputStream & BufferedOutputStream 三.对象流:ObjectInputStream & Ob ...
- java基础—IO流——转换流的操作
转换流的使用 转换流: InputStreamReader:字节到字符的桥梁,解码. OutputStreamWriter:字符到字节的桥梁,编码 import java.io.Buf ...
- java基础 io流 字节流 字符流 节点流 包装流 转换流 缓冲流 对象流 打印流 Properties类
目录 1.概念 2.常用的文件操作 2.1 创建文件 2.2 获取文件相关信息 2.3 目录的操作和文件删除 3. IO流原理及流的分类 3.1 流的分类 4.InputStream 字节输入流 4. ...
- IO流-转换流-Java
InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流.比如,如下场景 System.in是字节流对象,代表键盘的输入,如果想按行接受用户的输入时,就必须 ...
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...
最新文章
- 谷歌砸出10亿美元,要为湾区困难群众,建2万套经适房
- SettingsPLSQLDeveloper
- 编辑器FreeTextBox升级至3.0
- C#基础 基本语法4
- node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记
- 当众讲话第二章当众讲话的基本原则
- [Ahoi2013]连通图
- 125_Power BI 中 DAX 的性能测试
- jQuery源码研究分析学习笔记-jQuery.fn.init()(五)
- 怎样设计访谈提纲_用户调研报告如何做?访谈-整理-报告?
- head first java 03 ( 6 章 )
- windows中的一个小bug
- svn up 更新与回退
- session依赖cookie,如果浏览器禁用了cookie呢?
- OpenCasCade网格的显示
- Transact-SQL语言
- Cisco 防火墙 SSH配置
- 微信小程序开发者工具及官网
- 监督学习、无监督学习、半监督学习、弱监督学习、强化学习
- 简述计算机键盘上shift键的作用,电脑Shift键作用大全