12.4  转换流--OutputStreamWriter类与InputStreamReader类

整个IO包实际上分为字节流和字符流,可是除了这两个流之外,还存在一组字节流-字符流的转换类。

OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。

假设以文件操作为例,则内存中的字符数据须要通过OutputStreamWriter变为字节流才干保存在文件里,读取时须要将读入的字节流通过InputStreamReader变为字符流,转换步骤如图12-7所看到的。

 
(点击查看大图)图12-7  转换步骤

从图12-7中能够清楚地发现,无论怎样操作,终于所有是以字节的形式保存在文件里。

OutputStreamWriter的构造方法例如以下:

  1. public OutputStreamWriter(OutputStream out) ( 变的是流 变成字符流 才干对字符进行操作啊)

范例:将字节输出流变为字符输出流

  1. package org.lxh.iodemo.changeiodemo;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.OutputStreamWriter;
  5. import java.io.Writer;
  6. public class OutputStreamWriterDemo01 {
  7. public static void main(String[] args) 
    throws Exception { // 全部的异常
  8. 抛出
  9. File f = new File("d:" + File.separator + "test.txt");
  10. Writer out = null;
  11. out = new OutputStreamWriter(new FileOutputStream(f));// 字节流变为字符流
  12. out.write("hello world");   // 使用字符流输出
  13. out.close();
  14. }
  15. }

程序执行结果:

 
范例:将字节输入流变为字符输入流
  1. package org.lxh.iodemo.changeiodemo;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.Reader;
  6. public class InputStreamReaderDemo01 {
  7. public static void main(String[] args) throws
     Exception { // 全部的异常抛出
  8. File f = new File("d:" + File.separator + "test.txt");
  9. Reader reader = null;
  10. reader = new InputStreamReader(new FileInputStream(f));// 将字节流变为字符流
  11. char[] c = new char[1024];
  12. int len = reader.read(c);
  13. reader.close();
  14. System.out.println(new String(c, 0, len));
  15. }
  16. }

U提示:FileWriter和FileReader的说明。

从JDK文档中能够知道FileOutputStream是OutputStream 的直接子类,FileInputStream也是InputStream的直接子类,可是在字符流文件里的两个操作类却有一些特殊,FileWriter并不直接是Writer的子类,而是OutputStreamWriter的子类,而FileReader也不直接是Reader的子类,是InputStreamReader的子类,那么从这两个类的继承关系就能够清楚地发现,无论是使用字节流还是字符流实际上终于都是以字节的形式操作输入/输出流的。

转换流--OutputStreamWriter类与InputStreamReader类的更多相关文章

  1. 转换流的使用(InputStreamReader,OutputStreamWriter)

    我们如何设置字节输入流.字节输出流的编码和解码格式? 在字节输入流(InputStream).字节输出流(OutputStream)中,并没有提供设置编码和解码格式的方法. InputStream的A ...

  2. 转换流——OutputStreamWriter类与InputStreamReader类

    字节流和字符流的转换类 OutputStreamWriter:是Writer的子类,将输出的字符流变成字节流 InputStreamReader:是Reader的子类,将输入的字节流变成字符流 将字节 ...

  3. (25)IO流之转换流InputStreamReader和OutputStreamWriter

    InputStreamReader:字节到字符的桥梁. OutputStreamWriter:字符到字节的桥梁. 它们有转换作用,而本身又是字符流.所以在构造的时候,需要传入字节流对象进来. 构造函数 ...

  4. Java基础---Java---IO流-----读取键盘录入、InputStreamReader、转换流、OutputStreamWriter、InputStreamReader

    字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream Buffe ...

  5. 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】

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

  6. JAVASE(十六) IO流 :File类、节点流、缓冲流、转换流、编码集、对象流

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.File类型 1.1.File类的理解 File类是在java.io包下 File可以理解成一个文件 ...

  7. File类与常用IO流第九章——转换流

    第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...

  8. Java基础知识强化之IO流笔记36:InputStreamReader/OutputStreamWriter 复制文本文件案例

    1. 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中. 数据源:  a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader 目的地:  b.t ...

  9. 转换流的原理和OutputStreamWriter介绍&代码实现

    转换流的原理 OutputStreamWriter介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileNotFoun ...

随机推荐

  1. php smarty 缓存和配置文件的基本使用方法

    smarty高级部分包括缓存机制和配置文件的调用 下面是代码实现: 文件一,配置文件: #全局变量 title="网站主页" content="一个网站的主体部分&quo ...

  2. 如何登录mysql? cmd怎么连接mysql数据库

    Mysql开源数据库,任何人都可以下载安装使用.那么安装好的mysql如何登陆连接mysql数据库呢? 连接mysql数据库的几种方法 一 Mysql命令行连接 一般对于刚刚安装好的mysql,如果勾 ...

  3. SQL跨表更新

    [一篮饭特稀原创,转载请注明出自http://www.cnblogs.com/wanghafan/p/4384039.html]  前提:两张表要更新的字段.关联字段结构一致 更新库:FJPDI_TZ ...

  4. 如何忽略usb host 模式设备连接确认对话框

    <li class="alt"><span><span>package android.hardware.usb;  </span> ...

  5. Android Service 生命周期和使用注意项

    一.基础知识 服务一般分为两种: 1:本地服务, Local Service 用于应用程序内部.在Service可以调用Context.startService()启动,调用Context.stopS ...

  6. 《深入理解linux内核》第二章 内存寻址

    三种不同的内存地址 逻辑地址(logical address)包含在linux实际指令中的地址,即分段式地址,是对应的硬件平台段式管理转换前地址由16位的段选择符(segment selector)和 ...

  7. NOI2010海拔

    2007: [Noi2010]海拔 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 1302  Solved: 612[Submit][Status] ...

  8. [swustoj 443] Handsome Swap

    Handsome Swap(0443) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 89 Accepted: 20 Accepte ...

  9. jquery easyui datebox 的使用

    看了jquery easyui databox的官方api,还可以加入倒是很简单,但是想要获得他的值和修改值就很费劲,不知道怎么弄,试了n次终于搞定.这里总结一下,供有相同问题的人查询. 1. 官方a ...

  10. Log4net创建日志及简单扩展

    转:http://blog.csdn.net/CHENFEIYANG2009/article/details/5397342 1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log ...