InputStreamReader &OutputStreamWriter
InputStreamReader
是字符流和字节流之间的桥梁,可以将字节流转换为字符流,并且能为字节流指定字符集,可以处理一个个的字符。
1.以字符流的形式操作字节流
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
* 转换流
* 1.以字符流的形式操作字节流(纯文本的)
* 2.指定字符集
* @author MacBook
*
*/
public class ConverTest {
public static void main(String[] args) {
// 操作System.in 和System.out
try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))){
//循环获取键盘的输入(exit退出),输出此内容。
String mag="";
while(!mag.equals("exit")) {
mag = reader.readLine();//逐行读取
writer.write(mag);//循环写出
writer.newLine();
writer.flush();//强制刷新
}
}catch(IOException e){
System.out.println("操作异常!");
}
}
}
2.操作网络流
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
/**
* 转换流 - 操作网络流
* @author MacBook
*
*/
public class ConverTest03 {
public static void main(String[] args) {
// 操作网络流 下载百度的源代码
//选择流
try(BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"))){
String msg;
while((msg = reader.readLine())!=null){
System.out.println(msg);//如果这里出现乱码就是字符集不统一
}
}catch(IOException e) {
System.out.println("操作异常!");
}
}
/**
* 方法一 ,有乱码,由于字节数不够出现乱码
*/
public static void test01(){
//选择流
try(InputStream is = new URL("http://www.baidu.com").openStream()){
//操作:读取
int temp;
while((temp = is.read())!=-1) {
System.out.print((char)temp);
}
}catch(IOException e) {
System.out.println("操作异常!");
}
}
/**
* 方法二、转换为字符流,没有乱码
*/
public static void test02() {
//选择流
try(InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream(),"utf-8")){
//操作:读取
int temp;
while((temp = is.read())!=-1) {
System.out.print((char)temp);
}
}catch(IOException e) {
System.out.println("操作异常!");
}
}
}
3.两个转换流一起用
package cn.lesson.Burrfed;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
/**
* 转换流 - 操作网络流
* @author MacBook
*
*/
public class ConverTest03 {
public static void main(String[] args) {
// 操作网络流 下载百度的源代码
//选择流
try(BufferedReader reader =
new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"));
BufferedWriter writer =
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("baidu.html")))){
String msg;
while((msg = reader.readLine())!=null){
writer.write(msg);
writer.newLine();
}
writer.flush();
}catch(IOException e) {
System.out.println("操作异常!");
}
}
}