掌握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. 如何用sqlplus执行sql脚本,且让出错后及时退出sqlplus

    按sqlplus常规作法,是要登陆,输入用户名和密码才能操作的. 并且,如果不作特别设置,SQL脚本里的部门语句有问题后,它还是会坚持执行完成其余的SQL的. 为了安全和自动化,得改进一下了. sql ...

  2. RASscan

    内网端口极速扫描器 软件下载地址:https://github.com/RASSec/RASscan 命令: Python Rasscan.py 网络第一个ip 网络最后一个ip

  3. 使用 Hibernate 完成 HibernateUtils 类 (适用于单独使用Hibernate或Struts+Hibernate)

    package com.istc.Utilities; import org.hibernate.Session; import org.hibernate.SessionFactory; impor ...

  4. LCIS最长公共上升子序列

    最长公共上升子序列LCIS,如字面意思,就是在对于两个数列A和B的最长的单调递增的公共子序列. 这道题目是LCS和LIS的综合. 在LIS中,我们通过两重循环枚举当序列以当前位置为结尾时,A序列中当前 ...

  5. 主席树 STL+二分【p3939】数颜色

    Description 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 \(1\) 到 \(n\) 的 \(n\) 只兔子排成长长的一 ...

  6. Java的ClassLoader机制

    http://blog.chenlb.com/2009/06/java-classloader-architecture.html http://blog.csdn.net/lovingprince/ ...

  7. [Codeforces 32E] Hide-and-Seek

    Brief Intro: 给两个人的坐标,一堵墙和一面镜子,询问两人能否看见对方 Solution: 一道以分类讨论为主的计算几何题, 分别讨论两人坐标连线是否经过墙/镜子即可, 难点在于如何求出点x ...

  8. Ze_Min Tree 主席树

    前言 主席树,也叫可持久化线段树,所以他的本质是颗线段树,而可持久化指的是这颗线段树可以访问过去某个时刻线段树上的信息. 应用 应用的比较多的是查询区间的第k大值(因为其他的数据结构不好做). 实现 ...

  9. [JOISC2017]細長い屋敷

    题目大意: $n(n\le5\times10^5)$个房间排成一排,相邻两个房间之间有一扇门,第$i$个房间和第$i+1$个房间之间的门可以用第$c_i$种钥匙打开(可能有多个门可以用同一种钥匙打开) ...

  10. 5.10(java学习笔记)容器的同步控制与只读设置

    1.容器的同步控制 像我们平常使用的容器有些是不同步的即线程不安全,例如HashMap等,在多线程时可能出现并发问题. 而有些容器又是同步的,例如Hashtable. 有些时候我们需要将这些不同步的容 ...