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();
-
}
-
}
这种操作在实际开发中并没有多么大的意义,我们主要用来分析FileOutputStream、FileInputStream及FileWriter、 FileReader之间的继承关系。
该类继承是典型的装饰者设计模型
优点:灵活,被装饰者可灵活组装需要的类。
缺点:类结构复杂,含有大量的其他类。
2、字符编码
1、常用的字符编码
(1)GBK、gb2312:描述的是中文编码,其中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不支持中文编码,所以导致有中文的地方出现了乱码。所以我们可以得出下列结论:
乱码产生的原因:编码与解码的字符编码不一致。
JavaIO——转换流、字符编码的更多相关文章
- java 输入输出IO 转换流-字符编码
编码和其产生的问题: 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉字等字符是二进制数转换之后的结果. 按照某种规则,将字符存储到计算机中,称为编码 .反之,将存 ...
- JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...
- python学习Day7 数据类型的转换,字符编码演变历程
一.数据类型的转换 1.1.1.字符转列表:lst1 = str.split(默认空格,也可依据指定字符分界),若无分界字符,就没法拆分,这时可以直接放进list转成列表 ----> s1 = ...
- 批量转换文件字符编码(GBK转UTF-8)
今天收到一份代码,拖到IDE中发现乱码,看来下编码是GBK的(
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件
IDEA默认的编码格式是UTF-8 新建一个txt文件.输入你好 ANSI就是系统默认编码.保存即可. 通过IDE打开是乱码的,因为默认打开的方式是UTF-8 转换为char类型 输出了乱码
- javaSE学习笔记(15) ---缓冲流、转换流、序列化流
javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...
- Java-IO流之转换流的使用和编码与解码原理
一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...
- Java精选笔记_IO流(转换流、常用流、流操作规律、字符编码)
IO流 用来处理设备之间的数据传输,java对数据的操作是通过流的方式,java用于操作流的对象都在IO包中 按操作数据分为:字节流和字符流:按流向分为:输入流和输出流. 程序从输入流中读取数据,向输 ...
- java 节点流(字符流,字节流)和包装流(缓冲流,转换流)
结点流:直接对File类进行操作的文件流 package stream; import java.io.File; import java.io.FileNotFoundException; impo ...
随机推荐
- laravel常用查询
插入 DB::table('t_admin_users')->insert([ [ 'role_id' => $allData['roleId'], 'username' => $a ...
- 使用gitlab runner 进行CI(四):使用Gitlab Page托管项目文档
目录 1.什么是Gitlab Pages 2.开启Gitlab Pages 3.基本过程 4.托管markdown文档 4.1 安装sphinx等依赖 4.2 配置项目的sphinx配置 4.3 编写 ...
- centos redhat 安装g++
正确安装命令 : yum install gcc-c++ libstdc++-devel 安装后可以在/bin/找到
- C++ 入门到进阶 学习路线
前言 学习这件事不在乎有没有人教你,最重要的是在于你自己有没有觉悟和恒心. -- 法布尔 简介 随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能 ...
- webpack 之js兼容性处理
webpack 之js兼容性处理 // 用来拼接绝对路径的方法 const {resolve} = require('path') const HtmlWebpackPlugin = require( ...
- 『学了就忘』Linux基础命令 — 37、Linux中挂载操作的相关命令
目录 1.mount命令介绍 (1)mount命令说明 (2)mount命令格式 2.mount命令示例 3.mount -a命令说明 4.-o特殊选项说明 5.exec/noexec选项说明 挂载就 ...
- ES6-正则新增(复习+学习)
ES6-正则 昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上: 1.RegExp构造函数的区别 2.新增的修饰符 ...
- FZU ICPC 2020 寒假训练 3
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...
- Typora常用命令
目录 Typora编辑器所用语法--Markdown 简介 1.Markdown --标题 2. Markdown --列表(子标题) 3. Markdown --列表嵌套 4. Markdown - ...
- 菜鸡的Java笔记 开发支持类库
开发支持类库 SupportClassLibrary 观察者设计模式的支持类库 content (内容) 什么是观察者设计模式呢? ...