Java 字节流、字符流和转换流之间的关系
1. 字节流、字符流和转换流之间的关系
(1)字节流:读取字节到内存或将字节写入硬盘文件中。
(2)字符流:将字节转换为字符(读入)或将字符转换为字节(写出)。
(3)转换流:将字节按照指定的编码格式转换为字符(读入),或将字符按照指定的编码格式转换为字节(写出),字节(字符)通向字符(字节)的桥梁。
2.说明
上图中,硬盘中文件1.txt中有文字【你好】,如果编码格式为GBK,则存储的字节个数为4个,利用字节输入流FileInputStream将字节读取到字符流缓冲区,FileReader字符流会依据工作环境IDEA的编码格式对读取的字节进行解码,然后IDEA的编码格式为UTF-8,则会出现乱码。如果使用转换流InputStreamReader将字节转换为字符,该转换流可以使用默认的编码或者指定的编码格式,进而保证解码的准确性,最终读入内存。
上图中,将内存中的【你好】写出到硬盘文件1.txt中,使用字符输出流FileWriter时,该字符流会将你好按照IEDA的默认编码格式UTF-8将字符转换为字节,存入缓冲区,之后利用FileOutputStream字节流,将缓冲区内容写出到文件中,此时文件内容的编码格式会默认为UTF-8。如果使用OutputStreamWriter转换流可以使用指定的编码格式将字符转换为字节,之后利用字节流将字节写入文件。
3.案例
(1)输出转换流案例:
/*** OutputStreamWriter转换流* (1)OutputStreamWriter(OutputStream out);使用默认编码格式,将字符编码成字节* (2)OutputStreamWriter(OutputStream out,String charsetName);使用指定编码格式,将字符编码成字节*/
private static void osw01() throws Exception {OutputStream os = new FileOutputStream("E:\\kankan\\1.txt");OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");osw.write("你好");osw.flush();osw.close();
}
(2)输入转换流案例:
/** InputStreamReader转换流* (1)InputStreamReader(InputStream in);使用默认的编码格式,将字节转换为字符* (2)InputStreamReader(InputStream in,String charsetName);使用指定编码格式,将字节转换为字符*/
private static void isr01() throws IOException {InputStream is = new FileInputStream("E:\\kankan\\1.txt");InputStreamReader isr = new InputStreamReader(is,"utf-8");char[] chs = new char[1024];int len = 0;while((len=isr.read(chs))!=-1){System.out.println(new String(chs,0,len));}isr.close();
}
Java 字节流、字符流和转换流之间的关系相关推荐
- 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...
- 一文读懂Java中File类、字节流、字符流、转换流
一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...
- Java——I/O(字节流、字符流与转换流 )
目录 字节流和字符流 1. 流操作流程 2. 字节输出流(OutputStream) 2.1 输出方法 3. 自动关闭支持AutoCloseable-JDK1.7 4. 字节输入流(InputSrea ...
- Java基础之——缓冲流、转换流、序列化流、打印流
缓冲流.转换流.序列化流 1.缓冲流 见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等.这些功能更为强大的流,都是在基本的流对象基础之上创建而来的, ...
- java 流 改变编码_Java-IO流之转换流的使用和编码与解码原理
一.理论: 1.字符流和字节流区别是什么? 字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符: 2.什么是 ...
- 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)
处理流之一:缓冲流 为了提高数据读写的速度, Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区. 缓冲流要" ...
- java(十)【属性集,缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 今日目标 IO资源的处理. finnally释放资源 jdk 1.7开始的新技术 try-with-resources 缓冲流 提高字节流和字符流读写数据的性能 ...
- 【02】Java进阶:13-IO资源的处理、属性集、缓冲流、转换流、序列化、打印流、装饰设计模式、commons-io工具包
day13[Properties类.缓冲流.转换流.序列化流.装饰者模式.commons-io工具包] 今日内容 IO异常处理 Properties类 缓冲流 转换流 序列化\反序列化流 打印流 装饰 ...
- 黑马程序员-Java教程-10缓冲流、转换流、序列化流
day10[缓冲流.转换流.序列化流.打印流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本 ...
最新文章
- Oracle中Scott账户常见表的样本查询编程与数据库
- 反射中getMethods 与 getDeclaredMethods 的区别
- csgo准星设置代码_csgo控制台的这些神秘的指令你知道多少
- Devexpress VCL Build v2014 vol 14.1.4 发布
- 如何用python处理txt_python处理txt文件操作
- LevelDB的源码阅读(三) Get操作
- 怎么用命令启动服务器文件,linux启动服务器命令
- 解决Golang程序运行时占用内存不断增加的问题
- zetoro导入csl 软件学报
- 怎么自动删除以前数据脚本_移动硬盘数据删除了怎么恢复?硬盘恢复软件分享!...
- 2022年数学建模C题优秀论文
- 5种最流行的密码破解工具:保护您的账号
- 2010.04.20 工作之路 - 明源軟件科技
- Learn to say “fuck you” to the world every once in a while
- 关于报错connection holder is null
- PlatformIO开发之STM32点灯(基于arduino框架)
- 面试被问到这道送命题,怎么回答才不会变成炮灰
- Linux各种软件的安装
- 从 SPA 到 PWA:Web App的下一站在哪?
- 针对Vmware打开BIOS中VT虚拟化相关后仍然报错