什么是字符流?

java IO字符流教程流体系

字符流=字节流+编码表

字符其实只是一种特殊的二进制字节,是按照一定的编码方式处理之后,按照一定规则来存储信息的数据,字符在计算机中也是由二进制组成的,只不过这种二进制可以按照一种规则解码后,成为人类可以直接阅读的自然语言,而普通的二进制文件只有计算机能直接“阅读”。字节操作和字符操作的区别就在于数据的格式。在使用场景上,字符流无法直接获取文本信息的二进制文件,比如图片,mp3,视频文件等,只能使用字节流。而对于文本信息,则更适合使用字符流。

Reader与Writer

Reader接口详解

Java Reader是用于读取字符流的抽象类。子类必须实现的唯一方法是read(char [],int,int)和close()。但是,大多数子类将覆盖某些方法以提供更高的效率和、附加功能。

  • Reader类详解

  1. 字段
字段类型 字段 说明
protected Object lock 对象用于读取流时候进行加锁操作
  1. 构造方法

  2. 方法

方法 说明
abstract void close() 它关闭流并释放与之相关的任何系统资源。
void mark(int readAheadLimit) 它标记流中的当前位置。
boolean markSupported() 它告诉此流是否支持mark()操作。
int read() 读取单个字符。
int read(char[] cbuf) 读入数组。
int read(CharBuffer target) 它尝试将字符读入指定的字符缓冲区。
boolean ready() 它告诉这个流是否准备好被读取。
void reset() 重置流。
long skip(long n) 它跳过字符。
  • Writer类详解

它是用于写入字符流的抽象类。子类必须实现的方法有write(char[]、int、int)、flush()和close()。大多数子类将重写这里定义的一些方法以提供更高的效率和、附加功能。

方法 说明
abstract void close() 它关闭流并释放与之相关的任何系统资源。
void mark(int readAheadLimit) 它标记流中的当前位置。
boolean markSupported() 它告诉此流是否支持mark()操作。
int read() 读取单个字符。
int read(char[] cbuf) 读入数组。
int read(CharBuffer target) 它尝试将字符读入指定的字符缓冲区。
boolean ready() 它告诉这个流是否准备好被读取。
void reset() 重置流。
long skip(long n) 它跳过字符。
  • 字节流跟字符流区别

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.

  • 1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

  • 2.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

  • 类的设计思考

java的类设计采用了大量的设计模式,流Api也不例外,对于字符流采用适配器类InputStreamReader去操作底层字节流,在InputStreamReader类中构建StreamDecoder去操作字节流。而对于缓冲区流(后面文章会讲)则采用装饰者模式去增强类的行为,感兴趣的同学去阅读下源码!

实战演练(文件字符流)

  • 写入字符串到文件中
import java.io.FileWriter;  
public class FileWriterExample {  
    public static void main(String args[]){    
         try{    
           FileWriter fw=new FileWriter("D:\\testout.txt");    
           fw.write("Welcome to javaTpoint.");    
           fw.close();    
          }catch(Exception e){System.out.println(e);}    
          System.out.println("Success...");    
     }    
}  
  • 读取文件中的字符串
import java.io.*;  
public class ReaderExample {  
    public static void main(String[] args) {  
        try {  
            Reader reader = new FileReader("D:\\testout.txt");  
            int data = reader.read();  
            while (data != -1) {  
                System.out.print((char) data);  
                data = reader.read();  
            }  
            reader.close();  
        } catch (Exception ex) {  
            System.out.println(ex.getMessage());  
        }  
    }  

识别下方二维码!回复: 入群 ,扫码加入我们交流群! java IO字符流教程

java IO字符流教程点赞是认可,在看是支持

相关文章: