转换流

简介: 转换流

一、转换流

1.转换流:属于字符流

  • InputStreamReader 将一个字节的输入流转换为字符的输入流
  • OutputStreamWriter 将一个字节的输出流转换为字符的输出流

2.作用

  • 提供字节流与字符流之间的转换



3.解码与编码

  • 解码:字节、字节数组—>字符数组、字符串
  • 编码:字符数组、字符串—>字节、字节数组

4.字符集

ASCII:美国标准信息交换码。 用一个字节的7位可以表示。

ISO8859-1:拉丁码表。欧洲码表。用一个字节的8位表示。

GB2312:中国的中文编码表。最多两个字节编码所有字符

GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码

Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示

UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。最新可用6个字节来表示一个字符。


5.补充



二、代码

InputStreamReaderTest类

package com.day0316_2;
import org.junit.jupiter.api.Test;
import java.io.*;
/**
 * 处理流之二:转换流
 *  1.转换流:属于字符流
 *  InputStreamReader 将一个字节的输入流转换为字符的输入流
 *  OutputStreamWriter 将一个字节的输出流转换为字符的输出流
 *
 *  2.作用:提供字节流与字符流之间的转换
 *
 *  3.解码:字节、字节数组--->字符数组、字符串
 *    编码:字符数组、字符串--->字节、字节数组
 *
 *  4.字符集
 * ASCII:美国标准信息交换码。
 * 用一个字节的7位可以表示。
 * ISO8859-1:拉丁码表。欧洲码表
 * 用一个字节的8位表示。
 * GB2312:中国的中文编码表。最多两个字节编码所有字符
 * GBK:中国的中文编码表升级,融合了更多的中文文字符号。最多两个字节编码
 * Unicode:国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示
 * UTF-8:变长的编码方式,可用1-4个字节来表示一个字符。最新可用6个字节来表示一个字符。
 *
 *
 *
 */
public class InputStreamReaderTest  {
    /*
    此时处理异常的话,仍然应该使用try-catch-finally
    InputStreamReader的使用,实现了字节的输入流到字符的输入类的转换
     */
    @Test
    public void test1() throws IOException {
        FileInputStream fis=new FileInputStream("hello.txt");
//        InputStreamReader isr =new InputStreamReader(fis);//使用系统默认的字符集
        //参数2指明了字符集,具体使用哪个字符集,取决于文件保存是使用的字符集
        InputStreamReader isr =new InputStreamReader(fis,"UTF-8");//使用系统默认的字符集
        char [] cbuf=new char[20];
        int len;
        while((len= isr.read(cbuf))!=-1){
            String str=new String(cbuf,0,len);
            System.out.println(str);
        }
        isr.close();
    }
    /*
    此时处理异常的话,仍然应该使用try-catch-finally
    综合使用InputStreamReader和OutputStreamWriter
     */
    @Test
    public void test2() throws IOException{
        //1、造文件、造流
        File file1=new File("hello.txt");
        File file2=new File("hello_gbk.txt");
        FileInputStream fis=new FileInputStream(file1);
        FileOutputStream fos=new FileOutputStream(file2);
        InputStreamReader isr=new InputStreamReader(fis,"utf-8");
        OutputStreamWriter osw=new OutputStreamWriter(fos,"gbk");
        //2、读写过程
        char [] cbuf =new char[20];
        int len;
        while ((len= isr.read(cbuf))!=-1){
            osw.write(cbuf,0,len);
        }
        //3、关闭资源
        isr.close();
        osw.close();
    }
}
相关文章
|
2天前
|
存储 Java
使用OutputStreamWriter写入数据
使用OutputStreamWriter写入数据
|
28天前
字节流和字符流
字节流和字符流
11 0
|
2月前
|
存储 自然语言处理 Java
java缓冲流、转换流、序列化流、打印流
java缓冲流、转换流、序列化流、打印流介绍
|
2月前
|
存储 自然语言处理 Java
day17-缓冲流&转换流&序列化流&打印流&Properties(二)
day17-缓冲流&转换流&序列化流&打印流&Properties
48 1
|
2月前
day17-缓冲流&转换流&序列化流&打印流&Properties(三)
day17-缓冲流&转换流&序列化流&打印流&Properties
44 1
|
2月前
|
存储
day17-缓冲流&转换流&序列化流&打印流&Properties(一)
day17-缓冲流&转换流&序列化流&打印流&Properties
56 0
|
8月前
|
存储 Java
IO流之 字节流 & 字符流
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于Java.io包中,称之为IO(输入输出)流。IO流即InputOutput的缩写。一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。httpshttps。...
96 0
|
11月前
|
存储 Windows
转换流
转换流
37 0
|
11月前
|
存储 Java
字符流
字符流
25 0
|
11月前
缓冲流
缓冲流
29 0