转换流

简介: 转换流

一、转换流

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();
    }
}
相关文章
|
16天前
|
存储 安全 Java
字节流和字符流有哪些区别
字节流和字符流是Java中两种基本的I/O流类型。字节流以8位字节为单位处理数据,适用于所有类型的文件;字符流以16位Unicode字符为单位,专为文本文件设计,自动完成字符编码转换,更适合文本处理。
30 2
|
3月前
|
Java
缓冲流和转换流的使用【 File类+IO流知识回顾③】
这篇文章介绍了Java中缓冲流(BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter)和转换流(InputStreamReader, OutputStreamWriter)的使用,包括它们的构造方法和如何利用它们提高IO操作的效率及处理字符编码问题。
缓冲流和转换流的使用【 File类+IO流知识回顾③】
|
3月前
|
移动开发 Java Linux
IO流:字节流
在Java编程中,IO流是一个核心概念,用于与文件、网络、内存等数据源交互。Java的IO库提供丰富的类和方法支持数据读写。IO流分为字节流和字符流,前者可操作所有类型文件,后者仅限纯文本文件。`FileOutputStream`用于向文件写入字节,支持多种写入方式,并可通过构造函数的布尔参数控制是否追加写入。`FileInputStream`则用于从文件读取字节,支持逐字节或批量读取。文件拷贝可通过结合读写操作实现,高效的方法是一次性读取并写入大容量数组。处理IO流时需注意异常管理,合理使用try-catch-finally结构确保资源正确释放。JDK7及以后版本提供了自动关闭资源的简化语法
55 10
|
4月前
|
存储 Java 索引
|
5月前
|
存储 Java
使用OutputStreamWriter写入数据
使用OutputStreamWriter写入数据
|
6月前
字节流和字符流
字节流和字符流
38 0
|
7月前
|
存储 自然语言处理 Java
day17-缓冲流&转换流&序列化流&打印流&Properties(二)
day17-缓冲流&转换流&序列化流&打印流&Properties
65 1
|
7月前
day17-缓冲流&转换流&序列化流&打印流&Properties(三)
day17-缓冲流&转换流&序列化流&打印流&Properties
60 1
|
7月前
|
存储
day17-缓冲流&转换流&序列化流&打印流&Properties(一)
day17-缓冲流&转换流&序列化流&打印流&Properties
78 0
|
存储 Java
IO流之 字节流 & 字符流
大多数应用程序都需要实现与设备之间的数据传输,例如键盘可以输入数据,显示器可以显示程序的运行结果等。在Java中,将这种通过不同输入输出设备(键盘,内存,显示器,网络等)之间的数据传输抽象的表述为“流”,程序允许通过流的方式与输入输出设备进行数据传输。Java中的“流”都位于Java.io包中,称之为IO(输入输出)流。IO流即InputOutput的缩写。一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。httpshttps。...
193 0