字节流转字符流图片
很多系统或者框架的底层返回的都是字节流,但是为了处理可能要进行转换成字符流,所以提供了这个转换方法
举例
System.in、System.out都是字节流输入、输出
InputStreamReader
将字节转成字符--->解码--->decode
作用
-
InputStreamReader--->字节流转成字符流,处理纯文本内容
-
字节转成字符--->解码--->字符集--->指定字符集
OutputStreamWriter
将写入的字符转换成字节--->编码--->encode
这两个流的特点:在构造器可以指定字符集
InputStreamReader:--->字节数不够或者字符集不对都可能出现乱码
package iostudy.convert;
import jdk.internal.util.xml.impl.Input;
import java.io.*;
import java.net.URL;
/**
* 转换流:InputStreamReader、OutputStreamWriter
* 作用:
* 1、以字符流的形式操作字节流(纯文本的形式)
* 2、指定字符集--->构造器自带了
*/
public class ConvertTestNo2 {
public static void main(String[] args) {
/*创建源*/
File src = new File("D:/workspace/abc.txt");
Writer writer = null;
//操作System.in和System.out--->System.in输入的都是字符可以对其转换
//操作网络流 下载百度源代码--->网络爬虫第一步(先拿到源代码、进行分析、清晰、在进行处理--->存储)
//打开一个网络节点流、字节流--->因为是字节流,所以可以用字节流装饰符加速处理--->openStream为打开一个网络流节点
try (InputStream is = new URL("http://www.baidu.com").openStream()){
//创建FileWriter对象
writer = new FileWriter(src);
//进行操作
int temp;
while ((temp=is.read())!=-1){
writer.write((char)temp); //这里面可能会出现乱码现象--->使用InputStreamReader类实例化对象
}
/*强制刷新流*/
writer.flush();
}catch (IOException e){
System.out.println("操作异常!!!");
}finally {
try {
if (null!=writer){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
testNo1();
}
public static void testNo1(){
/*创建源*/
File src = new File("D:/workspace/abc.txt");
Writer writer = null;
//操作System.in和System.out--->System.in输入的都是字符可以对其转换
//操作网络流 下载百度源代码--->网络爬虫第一步(先拿到源代码、进行分析、清晰、在进行处理--->存储)
//打开一个网络节点流、字节流--->因为是字节流,所以可以用字节流装饰符加速处理--->openStream为打开一个网络流节点--->InputStreamReader获取网页源代码转成UTF-8的形式
try (InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream(), "UTF-8")){
//使用装饰流加速节点流
//创建FileWriter对象
writer = new FileWriter(src);
//进行操作
int temp;
while ((temp=is.read())!=-1){
writer.write((char)temp); //这里面可能会出现乱码现象--->使用InputStreamReader类实例化对象
}
/*强制刷新流*/
writer.flush();
}catch (IOException e){
System.out.println("操作异常!!!");
}finally {
try {
if (null!=writer){
writer.close();
}
}catch (IOException e){