掌握OutputStreamWriter和InputStreamReader类的作用

一般操作输入输出内容的时候,就需要使用字节或字符流,但是,有些时候,需要将字符流变成字节流形式,或者字节流变成字符流形式。

所以,就需要另一种转换流的操作类。

OutputStreamWriter:是Writer的子类。将输出的字符流变成字节流:即将字符流的输入对象变成字节流输入对象。

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

OutputStreamWriter类的构造方法

OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。

从构造方法可以看出,在outputStreamWriter类中需要一个字节流对象。

例如:将字节的文件输出流,以字符的形式输出。

package 类集;
import java.io.* ;
public class OutputStreamWriterDemo01{
public static void main(String args[]) throws Exception { // 所有异常抛出
File f = new File("d:" + File.separator + "test.txt") ;
Writer out = null ; // 字符输出流
out = new OutputStreamWriter(new FileOutputStream(f)) ; // 字节流变为字符流,同时向上转型。
out.write("hello world!!") ; // 使用字符流输出
out.close() ;
}
};

读的时候,也可以使用字符流的形式读取字节流文件。

package 类集;
import java.io.* ;
public class InputStreamReaderDemo01{
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ;
Reader reader = null ;
reader = new InputStreamReader(new FileInputStream(f)) ; // 将字节流变为字符流
char c[] = new char[1024] ;
int len = reader.read(c) ; // 读取
reader.close() ; // 关闭
System.out.println(new String(c,0,len)) ;
}
};

输出结果:

hello world!!

但是,以上只是文件操作为例,因为outputStreamWriter中接收的类型是OutputStream,只要是字节输出流都可以使用字符的形式操作。

而InputStreamReader中接收的类型是InputStream。只要是字节输入流,都可以使用字符的输入流操作

FileWriter和FileReader类的说明

java.io
类 FileWriter
java.lang.Object
继承者 java.io.Writer
继承者 java.io.OutputStreamWriter
继承者 java.io.FileWriter

FilWriter不是Writer的子类,而是转换流的子类。

java.io
FileReader
java.lang.Object
继承者 java.io.Reader
继承者 java.io.InputStreamReader
继承者 java.io.FileReader

FileReader也不是Reader的子类,而是转换流的子类。

也就是说,不管如何,虽然是以字符的输出流形式,操作字节流输出流,但是实际上还是以字节的形式输出。

而字符的输入流虽然是以字符的形式操作,但是还是使用了字节流,也就是说,在传输或者从文件读取数据的时候,文件里真正保存的数据永远是字节。 

总结

1,一定要掌握两个转换类的作用

2,一定要明白的终端点实际上是以字节的形式进行的。

3,FileWriter和FileReader两个子类的定义,中间使用了转换类。

 

JAVA-IO操作,字节-字符转换流的更多相关文章

  1. JAVA IO分析一:File类、字节流、字符流、字节字符转换流

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  2. Java IO输入输出流 字符数组流 ByteArrayOutputStream/ByteArrayInputStream

    private static void StringWriterAndReader() throws Exception { //字符串流(字符串的内存流) //字符串输入流 StringWriter ...

  3. java 字节→字符转换流

    OutputStreamWriter:把字节输出流对象转成字符输出流对象 InputStreamReader:把字节输入流对象转成字符输入流对象 FileWriter和FileReader分别是Out ...

  4. Java文件与io——复制文件和转换流

    字节流与字符流的区别 在所有的流操作里,字节永远是最基础的.任何基于字节的操作都是正确的.无论是文本文件还是二进制的文件. 如果确认流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文,那么 ...

  5. Java第三十三天,IO操作(续集),字符转换流

    计算机都是以二进制码格式存储文件的,但是在读写文件的过程中,每个应用程序都有自己的编码格式.FileWrite和FileRead类是通过查询系统默认码表进行读写的,因此在自己的系统上能够实现编码的智能 ...

  6. 缓冲字符流 java.io.BufferedWriter ,java.io.BufferedReader,缓冲字符输出流:PrintWriter

    package seday07; import java.io.IOException;import java.io.PrintWriter; /*** @author xingsir * 缓冲字符流 ...

  7. Java IO(Properties/对象序列化/打印流/commons-io)

    Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...

  8. Day17_103_IO_InputStreamReader 字符转换流

    InputStreamReader 字符转换流 * import java.io.InputStreamReader; 将字节输入流转换为字符输入流 * import java.io.OutputSt ...

  9. Java中的字节输入出流和字符输入输出流

    Java中的字节输入出流和字符输入输出流 以下哪个流类属于面向字符的输入流( ) A BufferedWriter B FileInputStream C ObjectInputStream D In ...

随机推荐

  1. Python 进阶 之 map()函数

    map()函数主要功能是对批量的元素进行相同的操作时可以大幅度的缩减代码. map函数参数详解: map(param1,param2,***) param1:函数名 ,要对批量元素进行处理的funct ...

  2. 【UOJ UNR #1】火车管理 可持久化线段树

    用可持久化线段树维护每个站的第一辆车和每个站的前一次更新的位置即可. #include<iostream> #include<cstring> #include<cstd ...

  3. 如何成为云计算大数据Spark高手

    Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台,它立足于内存计算,性能超过Hadoop百倍,从多迭代批量处理出发,兼收并蓄数据仓库.流处理和图计算等多种计算范式,是罕见的全能选手. ...

  4. DFS之奇偶剪枝

    问题描述: 给定一个 N * M的迷宫+起点+终点 ,迷宫中有一些障碍无法穿过,问能否不重复也不停留地在刚好一共走 t 步出迷宫. 先上结论: 在理想情况下,s到e需要的最小步数为m=|ex-sx|+ ...

  5. Carthage 不知不觉用到了

    Carthage 是什么? 这个问题我们简单点一句话总结: 你知道什么事CocoaPods吧,我相信只要是做iOS的都知道,Carthage 的属性和作用和我们常用的CocoaPods都是一样的,这样 ...

  6. zoj3988

    zoj3988 题意 如果一个集合 \(\{i,j\}\) 满足 \(i\neq j\) 且 \(a[i]+a[j]\) 是素数,则称之为素数集合. 给出一些数字,这些数字可以组成多种素数集合,从这些 ...

  7. 第1天-html快速入门

    开发工具:HBuilder 创建项目: 在电脑本地磁盘创建项目目录,如"D:\project" 打开HBuilder,这个工具默认会创建一个项目,我们删掉即可,然后新建项目:&qu ...

  8. 17、Django实战第17天:机构详情展示

    1.进入xadmin添加测试数据(教师.课程) 2.把以下4个前端页面复制到templates中 先打开这几个页面分析,它们和之前的课程机构列表页是不一样的机构,且没有共同的部分,但是这4个页面却是类 ...

  9. 选择快速源来加速linux系统更新

    sudo pacman-mirrors -c China -g 引用自manjaro百度贴吧

  10. Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析

    本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战 --------------------------------------------------------------- ...