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 字节流、字符流和转换流之间的关系相关推荐

  1. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  2. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  3. Java——I/O(字节流、字符流与转换流 )

    目录 字节流和字符流 1. 流操作流程 2. 字节输出流(OutputStream) 2.1 输出方法 3. 自动关闭支持AutoCloseable-JDK1.7 4. 字节输入流(InputSrea ...

  4. Java基础之——缓冲流、转换流、序列化流、打印流

    缓冲流.转换流.序列化流 1.缓冲流 见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等.这些功能更为强大的流,都是在基本的流对象基础之上创建而来的, ...

  5. java 流 改变编码_Java-IO流之转换流的使用和编码与解码原理

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

  6. 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)

    处理流之一:缓冲流  为了提高数据读写的速度, Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区.  缓冲流要" ...

  7. java(十)【属性集,缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 今日目标 IO资源的处理. finnally释放资源 jdk 1.7开始的新技术 try-with-resources 缓冲流 提高字节流和字符流读写数据的性能 ...

  8. 【02】Java进阶:13-IO资源的处理、属性集、缓冲流、转换流、序列化、打印流、装饰设计模式、commons-io工具包

    day13[Properties类.缓冲流.转换流.序列化流.装饰者模式.commons-io工具包] 今日内容 IO异常处理 Properties类 缓冲流 转换流 序列化\反序列化流 打印流 装饰 ...

  9. 黑马程序员-Java教程-10缓冲流、转换流、序列化流

    day10[缓冲流.转换流.序列化流.打印流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本 ...

最新文章

  1. Oracle中Scott账户常见表的样本查询编程与数据库
  2. 反射中getMethods 与 getDeclaredMethods 的区别
  3. csgo准星设置代码_csgo控制台的这些神秘的指令你知道多少
  4. Devexpress VCL Build v2014 vol 14.1.4 发布
  5. 如何用python处理txt_python处理txt文件操作
  6. LevelDB的源码阅读(三) Get操作
  7. 怎么用命令启动服务器文件,linux启动服务器命令
  8. 解决Golang程序运行时占用内存不断增加的问题
  9. zetoro导入csl 软件学报
  10. 怎么自动删除以前数据脚本_移动硬盘数据删除了怎么恢复?硬盘恢复软件分享!...
  11. 2022年数学建模C题优秀论文
  12. 5种最流行的密码破解工具:保护您的账号
  13. 2010.04.20 工作之路 - 明源軟件科技
  14. Learn to say “fuck you” to the world every once in a while
  15. 关于报错connection holder is null
  16. PlatformIO开发之STM32点灯(基于arduino框架)
  17. 面试被问到这道送命题,怎么回答才不会变成炮灰
  18. Linux各种软件的安装
  19. 从 SPA 到 PWA:Web App的下一站在哪?
  20. 针对Vmware打开BIOS中VT虚拟化相关后仍然报错

热门文章

  1. 前端网络安全防范详解
  2. 带内管理与带外管理的区别
  3. 圣诞雪花纷飞自定义View
  4. 神经网络——异构卷积
  5. 独家对话V神! 质疑之下的以太坊路在何方?
  6. jQuery--删除节点(remove()、detach()、empty())详解
  7. JsonIgnore导致不能接收参数
  8. 天纵智能软件快速开发平台文件管理插件二
  9. 《Java基础视频-深入浅出精华版视频》视频下载及视频介绍
  10. 漂移板初级进阶讲解(精编)