14 IO流(十一)——装换流InputStreamReader与OutputStreamWriter
什么是转换流
首先,这里的转换流指的是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的更多相关文章
- Java IO(五)——字符流进阶及BufferedWriter、BufferedReader
一.字符流和字节流的区别 拿一下上一篇文章的例子: package com.demo.io; import java.io.File; import java.io.FileReader; impor ...
- (25)IO流之转换流InputStreamReader和OutputStreamWriter
InputStreamReader:字节到字符的桥梁. OutputStreamWriter:字符到字节的桥梁. 它们有转换作用,而本身又是字符流.所以在构造的时候,需要传入字节流对象进来. 构造函数 ...
- Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
类的继承关系 Reader |__ BufferedReader.StringReader.InputStreamReader |__ FileReader Writer |__ BufferedWr ...
- Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)
Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...
- io流之转换流InputStreamReader、OutputStreamWriter
例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...
- Properties-转换流-打印流-序列化和反序列化-Commons-IO工具类
一.Properties 类(java.util) 概述:Properties 是一个双列集合;Properties 属于map的特殊的孙子类;Properties 类没有泛型,propert ...
- java IO通过字节流,字符流 读出写入
一:通过字节流操作数据的写入,读出 /** * 通过字节流写入和读出 * @param args */ public static String filePath = "G:" + ...
- 【转载】Java IO 转换流 字节转字符流
字节流输入字节流:---------| InputStream 所有输入字节流的基类. 抽象类.------------| FileInputStream 读取文件的输入字节流.----------- ...
- IO(七)----转换流
输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter 可以把输出字节流转换成输出字符流 . 是符流通向字节流 ...
随机推荐
- 1.typescirpt学习之路,*.d.ts和@types关系理解
今天看了看ts,文档上很多没用讲,小编疑惑了很久一个问题! *.d.ts和@types啥关系,小编查阅了很多文档,才弄明白. 首先,@types是npm的一个分支,我们把npm包发上去,npm包就会托 ...
- 桥接:JS调用安卓方法报错Uncaught Error: Error calling method on NPObject
说一说自己粗心踩到的一个不算坑的坑: 项目是安卓webview嵌入SPA单页应用页面,涉及到JS调用原生安卓方法,但就是在调用安卓方法时死活一直报错xxx NPObject一堆错误.写了一个测试页面 ...
- c博客作业—分支,结构顺序
1展现PTA总分 1 2 2本章学习类容总结 1常量和变量 常量:在运行中其值不变的量被称为常量,常量的类型通常是由书写格式决定,包括整型常量,实数型变量等等. 变量: 在运行中其值可变的量被称为变量 ...
- 小数据池/is和==/再谈编码作业
# 1,老男孩好声选秀大赛评委在打分的时候呢, 可以输入分数. 假设, 老男孩有10个评委. 让10个评委进行打分, 要求, 分数必须高于5分, 低于10分.将每个评委的打分情况保存在列表中. pin ...
- GoCN每日新闻(2019-10-26)
GoCN每日新闻(2019-10-26) 1. GateKeeper:滴滴开源的使用Go编写的不依赖分布式数据库的API网关 https://mp.weixin.qq.com/s/gpQSPJ-uRp ...
- 指针的运算符&、*
int y=0; int* yptr=&y; •互相反作用 •*&yptr -> * (&yptr) -> * (yptr的地址)-> 得到那个地址上的变量 ...
- mysql 获取数学成绩最高以及最低的同学
mysql> select * from test; +----+----------+-------+-----------+ | id | name | score | subject | ...
- SpringBoot:关于默认连接池Hikari的源码剖析
1.起因 因为这两天在给公司的一个项目升级SpringBoot版本,遇到了一些坑,升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x 今天早上双库操作遇到一个问题:jdbcU ...
- go 牛顿法开平方
func main() { fmt.Println(sqrt(3)) } func sqrt(x float64)float64{ z := x for i := 0; i < 10 ; i++ ...
- 刷题记录:2018HCTF&admin
目录 刷题记录:2018HCTF&admin 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:2018HCTF&admin 一.前言 经过一个暑假的学习,算是正经一条web狗 ...