InputStreamReader:字节到字符的桥梁。

OutputStreamWriter:字符到字节的桥梁。

它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

构造函数:

InputStreamReader(InputStream)

通过该构造函数初始化,使用的是本系统默认的编码表GBK。

InputStreamReader(InputStream,String charSet)

通过该构造函数初始化,可以指定编码表。

OutputStreamWriter(OutputStream)

通过该构造函数初始化,使用的是本系统默认的编码表GBK。

OutputStreamWriter(OutputStream,String charSet)

通过该构造函数初始化,可以指定编码表。

注意:

操作文件的字符流对象是转换流的子类。属于字节流体系:

Reader

  |--InputStreamReader

  |--FileReader

Writer

  |--OutputStreamWriter

  |--FileWriter

注意:

在使用FileReader操作文本数据时,该对象使用的是默认的编码表。

如果要使用指定编码表时,必须使用转换流。

如果系统默认编码是GBK的:

FileReader fr = new FileReader("a.txt");//操作a.txt的中的数据使用的本系统默认的GBK。

操作a.txt中的数据使用的也是本系统默认的GBK。

InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"));

这两句的代码的意义相同。

但是:如果a.txt中的文件中的字符数据是通过utf-8的形式编码。使用FileReader就无能为力,那么在读取时,就必须指定编码表。那么转换流必须使用。

InputStreamReader isr =

new InputStreamReader(new FileInputStream("a.txt"),"utf-8");

转换流的作用:

1、如果目前所获取到的是一个字节流需要转换成字符流使用,这是就需要使用转换流。把字节流转换成一个字符流

2、使用转换流可以指定编码表进行读写文件。 FileReader 不能指定码表,只能使用默认的码表.

使用场景:后面的网络编程就比用到,实际开发中经常见到的问题是,会调用别人的函数,而这些函数往往返回的都是字节流,而不是Reader或者Writer

 //使用输入字节流的转换流  指定码表进行读取文件数据
public static void readTest2() throws IOException
{
File file = new File("D:\\a.txt");
//创建字节输入流通道
FileInputStream fileInputStream = new FileInputStream(file);
//创建 字节输入字节流的转换流
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
char[] buf = new char[1024];
int length = 0;
while((length = inputStreamReader.read(buf))!=-1)
{
System.out.println(new String(buf, 0, length));
}
inputStreamReader.close(); } //使用输出字节流的转换流 指定码表写出数据
public static void writeTest2() throws IOException
{
File file = new File("D:\\a.txt");
//建立数据的输出通道
FileOutputStream fileOutputStream = new FileOutputStream(file);
//建立输出字节流转换成字符流 并且指定编码表
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
outputStreamWriter.write("新中国好");
outputStreamWriter.close();
} public static void writerTest() throws IOException
{
File file = new File("D:\\a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file); //把输出字节流装换成字符流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); outputStreamWriter.write("大家好");//以往这里使用的是 fileOutputStream.write("大家好".getBytes()); outputStreamWriter.close(); } public static void readTest() throws IOException
{
// Scanner scanner = new Scanner(System.in);
InputStream in = System.in; //获取了标准输入流
System.err.println("读到的字符:"+(char)in.read());//read()方法每次只能读入一个字节
//需要把字节流转换成字节流,这是据需要使用 转换流 InputStreamReader inputStreamReader = new InputStreamReader(in);
//使用字符流的缓冲类,一行行的读取数据
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line = null;
while((line = bufferedReader.readLine())!=null)
{
System.out.println("line:"+line);
}
}

(25)IO流之转换流InputStreamReader和OutputStreamWriter的更多相关文章

  1. Java IO流之转换流

    一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...

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

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

  3. I/O流之--转换流:InputStreamReader 和InputStreamWriter

    I/O流之--转换流:InputStreamReader 和InputStreamWriter 分类: java2014-07-01 15:30 815人阅读 评论(0) 收藏 举报   目录(?)[ ...

  4. IO流之转换流

    转换流 OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流 ...

  5. java ->IO流_转换流

    转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStre ...

  6. 10缓冲流、转换流、序列化流、Files

    十.流 10.1 缓冲流 10.1.1 概述                 缓冲流是对4个基本的FileXxx流的增强,所以也是4个流,按照数据类型进行分类                     ...

  7. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    [缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...

  8. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  9. 383 day10缓冲流、转换流、序列化流

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

  10. Java-IO流之转换流的使用和编码与解码原理

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

随机推荐

  1. GCD简介

    什么是GCD 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数   GCD的优势 GCD是苹果公司为多核的并行运算提 ...

  2. C++ 构造函数和析构函数的调用顺序、虚析构函数的作用

    构造函数和析构函数的调用顺序 构造函数的调用顺序: 当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达最底层的目标派生类的构造函数为止. 析构函数的调用书序: ...

  3. 一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)

    由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕.  - 关于项目 该项目的背景是现在微信公众号.微信服务号乃至微 ...

  4. c#算两个火星坐标的距离(高德or百度)

    /// <summary> /// 获取两个坐标之间的距离 /// </summary> /// <param name="lat1">第一个坐 ...

  5. js加载XML文件

    // XML文件 <?xml version="1.0" encoding="gb2312"?> <root> <father n ...

  6. Ceph BlueStore 解析:Object IO到磁盘的映射

    作者:吴香伟 发表于 2017/02/19 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 简单回顾下Ceph OSD后端存储引擎的历史. 为解决事务原子性问题, ...

  7. 【android开发笔记】为Button的背景图片添加边框式样式效果

    现在做的项目遇到一个问题,设计给过来的图片只有一种状态,但是实现的需求是要求有两个状态,另一种选状态为图片背景加边框.如图: 刚开使用使用ImageView ,ImageViewButton 效果不是 ...

  8. 如何用js实现自适应,原来只是几行代码的事(╯‵□′)╯︵┻━┻

    在javascript写下如下几行:   (function (doc, win, undefined) {            var docEl = doc.documentElement,   ...

  9. excel 下拉级联,重新选第一个,清空后一个已赋值,并且改变后一个下拉的内容。

    在前面的部分,设置下拉级联,我们已经可以百度到很多视频,我就不再多说,而我搞了一天解决 的,是在俩菜单都有值的情况下,重新选第一个下拉,后面那个值怎么清除,是一个事件调用.上图. 其中"$H ...

  10. 第八讲:I/O虚拟化

    一.I/O虚拟化的产生 服务器单个千兆以太网端口肯定能够支持单个应用,但是当被分割为10个.15个或者更多的服务器负载时(这其中包括网络.存储以及服务器之间的流量)可能就不够用了. 当遇到I/O瓶颈时 ...