转换流:

InputStreamReader   输入字节流转换成输入字符流
OutputStreamWriter  输出字节流转换成输出字符流

总结:就是字节流转换成字符流,但是不能字节流转换成字节流(联想记忆----只有屌丝想变成高富帅,没有高富帅想变成屌丝)

应用场景:
    在以后开发中中我们免不了使用别人的工具,如果别人就是返回一个字节流,但是你想用字符流,这个时候我们就可以使用转换流来把字节流转换成字符流

下面是一些实例演示:

把字节流转换成字符流,并实现读写

public class Demo3 {public static void main(String[] args) throws IOException {writeText();readText();}public static void readText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);//输入字节流转换成输入字符流InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {System.out.println(new String(cs,0,length));}inputStreamReader.close();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);outputStreamWriter.write("你好,陌生人");outputStreamWriter.close();}
}

把字节流转换成字符流后用字符流的缓存类实现读写

public class Demo4 {public static void main(String[] args) throws IOException {readText();writeText();}public static void readText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileOutputStream fileInputStream = new FileOutputStream(file);//输出字节流转换成输入字符流OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileInputStream);//使用输出字符流的缓存类BufferedWriter bufferedReader = new BufferedWriter(outputStreamWriter);//一行一行存bufferedReader.write("这是第一行数据");bufferedReader.newLine();bufferedReader.write("这是第二行数据");bufferedReader.close();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);//输入字节流转换成输入字符流InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);//使用输入字符流的缓存类BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line = null;//一行一行读取文本while((line = bufferedReader.readLine())!=null) {System.out.println(line);}bufferedReader.close();}
}

把字节流转换成字符流并指定码表进行读写数据

注意:记事本值存储和我们从记事本获取数据的都是码值,并不是我们输入时的字符,只不过我们在打开记事本的时候记事本自动给我们解码了,也就是我们看的懂得字符,上面我们没有指定码表,实际上是读写时使用的是默认的编码表gbk(java中默认码表)

public class Demo5 {public static void main(String[] args) throws IOException {writeText();readText();}public static void writeText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "iso8859-1");outputStreamWriter.write("你好!!!");outputStreamWriter.close();}public static void readText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"iso8859-1");char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {System.out.println(new String(cs,0,length));}inputStreamReader.close();}
}

在这个之前我实验四种码表(iso8859-1 gbk utf-8 utf-16),发现除了用iso8859-1码表写入记事本,其他的码表编码,记事本都可以解码成功(我们看的懂得文字),至于为什么我不知道可能跟我们系统有关(猜测),我们再来分析为什么会输出这么个鬼东西出来

首先我在存入“你好!!!”的时候,我是使用的iso8859-1码表编码的,注意这里我们编译的是中国文字,在iso8859-1码表中是中国文字是没有对应的码值的,所以会出现乱码,并且每一个字符都是一样的(全是?),也就是对于不能识别的字符都是给的63这个码值(下面例子可以知道),所以导致最后我们根据这个码值进行解码的时候控制台全输出的是?

在上一片中最后一个例子中,跟这个是不同的,那个例子中首先是使用gbk先进行编码成对应的码值,而这个码值在iso8859-1码表中都有对应的字符(iso8859-1码表的特性),最后我们才可以获取最早用gbk编码的后的码值后找到原来的字符,而这个是一开始就是用iso8859-1码表进行的编码,并且iso8859-1码表对于不能识别的字符都是给的63这个码值,这个是解码不出最初的字符的(如果有大神知道可以私信我,谢谢)

public static void readText() throws IOException {File file = new File("D:\\新建文件夹\\a.txt");FileInputStream fileInputStream = new FileInputStream(file);InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"iso8859-1");char[] cs = new char[1024];int length = 0;while((length = inputStreamReader.read(cs))!=-1) {String str = new String(cs,0,length);byte[] buf = str.getBytes("iso8859-1");System.out.println(Arrays.toString(buf));}inputStreamReader.close();}

转载于:https://www.cnblogs.com/zjdbk/p/9102387.html

75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)相关推荐

  1. 如何将字节流转换成字符流

    如何将字节流装饰成字符流 使用情况: 当编程时需大量读写,并不知文件格式时,采用字节流进行读写,再进行转换. 将字节流转换成字符流的过程被叫作转换流. 使用装饰者设计模式. 转换流: InputStr ...

  2. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

  3. java 字符流与字节流区别_JAVA 字符流与字节流的区别

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  4. IO流:输入字节流:InputStream 、 输出字节流:OutputStream 、输入字符流:Reader 、输出字符流:Writer、 BufferedInputStream

    ## 1_ IO流的介绍及其分类          * IO流:          *         I: Input 输入          *         O: Output 输出      ...

  5. 20170118:File类与IO流,File类,IO流的基本原理,IO流的分类,文件字节流与文件字符流

    一.File类 1.java.io.File类代表系统文件(文件和目录) 访问文件属性步骤 1). 创建文件对象:File file = new File(String pathname); 2). ...

  6. Java笔记整理六(File类,递归,字节流IO,字符流IO,流中的异常处理,属性集Properties,缓冲流,转换流,序列化,打印流)

    1.File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 文件和目录路径名的抽象表示 java把文件和文件夹封装位为一个File类,我们可 ...

  7. java读取字节效率最高_java中字节流读写和字符流读写怎么理解?哪个效率更高...

    我们java中的io流分为两大类,字节流和字符流. 可是在具体使用的时候怎么视情况进行使用? 怎么使用更加有效率? 有两个例子,帮忙看看解释一下,用哪种比较有效率以及适用情况. 下面是用字符流进行读写 ...

  8. java 文件字节流_Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  9. java字符流写入式乱码_字节流乱码与字符流乱码

    本文总结自:https://blog.csdn.net/mingliangniwo/article/details/44178491 前提:数据展示过程:数据写入response容器,浏览器解析res ...

最新文章

  1. EOS 源代码解读 (2)插件-流程
  2. 周期性取count请求是如何在前台setup的 - Tile count
  3. rpm如何卸载mysql_Linux下卸载和安装MySQL[rpm包]
  4. linux 划ext4,linux – 有没有像ext4这样的’快速’格式?
  5. java 自定义 钩子_使用现有钩子的函数不能使用自定义do_action钩子
  6. 【BZOJ4517】排列计数,组合数+错排
  7. spring mvc项目在IDEA下使用jrebel热部署报错!!
  8. 计算机犯罪法律,计算机犯罪的构成要件
  9. 查看Linux服务器架构是x86还是arm
  10. MongoDB存在使用Mongo Shell和Java驱动程序的示例
  11. PHP把商品详情数据加入到商品数据,如果商品有多个详情只展示一次商品数据
  12. Matlab 输入输出操作
  13. 武汉好地科技为您解析CMMI3和CMMI5的区别
  14. conda和pip卸载包的注意事项
  15. 服务器vmware新建虚拟机教程,如何创建虚拟机教程全解
  16. 电磁场与仿真软件(18)
  17. 百度Java二面面经
  18. Linux 内核软死锁(soft lockup)记录
  19. Kata Containers介绍
  20. Python:实现一个Pangram字符串至少包含一次所有字母算法(附完整源码)

热门文章

  1. markdown编辑模式添加除水印图片方法
  2. cordova自定义一个简单的alert的插件(android平台)
  3. 白话详细解读(四)-----FCN
  4. STM32F4 HAL库开发 -- DMA
  5. 八皇后问题 回溯法hdu2553
  6. 资源隔离之 Linux namespace
  7. 以太坊代币标准: ERC20、ERC223的介绍与比较
  8. java axisclient超时_调用webservice接口超时
  9. tensorflow命令行安装失败_2019-1 强化学习入坑记之ancanda安装
  10. JZOJ 5699. 【gdoi2018 day1】涛涛接苹果(appletree)