什么是转换流

首先,这里的转换流指的是InputstreamReader与OutputStreamWriter。

正如它们的名字,它的作用是将字节流转换为字符流。

为什么要转换为字符流呢?因为对于获取到的字节流,如果是纯文本数据,还是建议转换为字符流来处理比较方便且高效。

构造器

特别需要提到的一点:InputStreamReader(InputStream in,String charset) 与 OutputStreamWriter(OutputStream ou,String charset)

它们可以指定一个字符集,使得字节流转换为字符流时按照此字符集进行编码。

如不指定字符集,在Eclipse中与Project的字符集相同。

关键代码解析

BufferedWriter bw =
new BufferedWriter(
       new OutputStreamWriter(
new FileOutputStream("baidu.txt"),"iso-8859-1"))){

  

这个输出流要怎么理解呢?

首先,我们已经确定了要输出的是纯文本数据,输出为文件,那就可以选择两个流:FileOutputStream与FileWriter。那为什么选择前者不选择后者呢?因为我们需要对输出流的字符集进行设置,有这个功能的就是我们的转换流了。而转换流需要有一个用来转换的字节流,于是FileOutputStream就成了不二之选。

然后写BufferedWriter的原因,是因为OutputStreamWriter已经将FileOutputStream字节流转为了字符流,为了高效的运作,也为了配套使用,就要写BufferedWriter啦。

例子一:System.in与System.out两个字节流转换为字符流

import java.io.*;
public class IOTest03
{
/**
*字节流转字符流
*这里以System.in与System.out两个字节流为例子
*/
public static void main(String[] args){
//创建流
try(BufferedReader br = //由于字节流转为字符流,我们应该习惯性的包装一下
new BufferedReader(
new InputStreamReader(System.in,"utf-8"));
BufferedWriter bw =
new BufferedWriter(
new OutputStreamWriter(System.out,"iso-8859-1"))){
String msg = "";
while(!msg.equals("exit")){//循环读取与输出,直到读到“exit”
msg = br.readLine();
bw.write(msg);
bw.newLine();
bw.flush();
//System.out.println(line);
}
}catch(IOException e){
e.printStackTrace();
System.err.println("流读取错误");
}
}
}

  

例子二:从网络获取一个流

这里使用new URL("www.baidu.com").openStream()的方法创建一个流作为输入流(它是字节流)

将其输出到文件。

import java.io.*;
import java.net.URL;
public class IOTest04
{
/**
*字节流转字符流
*从网络获取一个流作为输入流
*/
public static void main(String[] args){
//创建流
try(BufferedReader br =
new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"));
BufferedWriter bw =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("baidu.txt"),"iso-8859-1"))){//使用8859,中文内容会乱码
//操作
String line = "";
while((line = br.readLine())!=null){
System.out.print(line);
bw.write(line);
bw.flush();
} }catch(IOException e){
e.printStackTrace();
System.out.println("流异常");
}
}
}

  

14 IO流(十一)——装换流InputStreamReader与OutputStreamWriter的更多相关文章

  1. Java IO(五)——字符流进阶及BufferedWriter、BufferedReader

    一.字符流和字节流的区别 拿一下上一篇文章的例子: package com.demo.io; import java.io.File; import java.io.FileReader; impor ...

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

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

  3. Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter

    类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...

  4. Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)

    Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...

  5. io流之转换流InputStreamReader、OutputStreamWriter

    例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...

  6. Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类

    一.Properties 类(java.util)     概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,propert ...

  7. java IO通过字节流,字符流 读出写入

    一:通过字节流操作数据的写入,读出 /** * 通过字节流写入和读出 * @param args */ public static String filePath = "G:" + ...

  8. 【转载】Java IO 转换流 字节转字符流

    字节流输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.----------- ...

  9. IO(七)----转换流

    输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter  可以把输出字节流转换成输出字符流 .  是符流通向字节流 ...

随机推荐

  1. maven install

    1. install maven under ubuntu apt install maven 2 speed up package download vim ~/.m2/settings.xml & ...

  2. Educational Codeforces Round 67

    Educational Codeforces Round 67 CF1187B Letters Shop 二分 https://codeforces.com/contest/1187/submissi ...

  3. 【JZOJ6223】【20190617】互膜

    题目 小\(A\)和小\(B\)在一个长度为\(2n\)的数组上面博弈,初始时奇数位置为A,偶数位置为B 小\(A\)先手,第\(i\)次操作的人可以将\(i\)或者\(i+1\)位置的值反转(也可以 ...

  4. Bacteria(优先队列)

    题目链接:http://codeforces.com/gym/101911/problem/C 问题简述:给定n个细胞以及每个细胞的大小,相同的细胞能进行融合,如果能融合到只剩1个细胞则输出需要额外增 ...

  5. 初识 Python 作业及默写

    1.简述变量量命名规范 2.name = input(“>>>”) name变量是什么数据类型? 3.if条件语句的基本结构? 4.用print打印出下面内容: 文能提笔安天下, 武 ...

  6. node.js切换多个版本

    开言 试用场景就是我们开发项目的时候,有可能一个项目需要v10版本,另一个项目需要v8版本,遇到这种问题,我们不能卸载再重新安装对应的版本去开发,遇到这样的问题的时候,那我们就可以去用另一种方式去切换 ...

  7. mysql 数据插入insert

    mysql> select * from user; +------+----------+-----------+ | id | name | address | +------+------ ...

  8. E4A写的app,点按钮,直接进入抖音指定用户界面

    今天在网上看到有一个人,直接进抖音某个指定用户的界面,一般模拟的方式,要先通过搜索的方式,再选用户,点进去 但是这样操作,不大友好,也影响速度 最理想的方式,是通过 "无障碍",直接控制抖音进入指定的 ...

  9. 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)

    在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consisten ...

  10. [转]JS - Promise使用详解2(ES6中的Promise)

    原文地址:https://www.hangge.com/blog/cache/detail_1638.html 2015年6月, ES2015(即 ECMAScript 6.ES6) 正式发布.其中  ...