字符流和字节流


Unicode

简而言之就是一个统一的编码标准,一个字符集,为每个字符规定一个用来表示该字符的数字。

Unicode详解

字节流和字符流

二者都是Java.io中的文件流操作,分为输入和输出。字节流是inputStream和outputStream,字符流是writer和reader,四个都是抽象类。

字符流处理单元是两个字节的Unicode,操作对象是字符、字符数组或者字符串。而字节流处理单元是一个字节,操作对象是字节和字节数组。所以字符流是Java虚拟机字节转换成两个字节的Unicode字符进行处理。

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;  字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。

字节流:

InputStream

|-- FileInputStream(基本文件流)

|-- BufferedInputStream

|-- DataInputStream

字符流

Reader

|-- InputStreamReader(byte 到char的桥梁)

|-- BufferedReader(常用)

Writer

|-- OutputStreamWriter(char 到 byte的桥梁)

|-- BufferedWriter

|-- PrintWriter (常用)

而管道输入流和管道输出流是用于不同线程之间的通信:PipeInpuStream和PipeOutputStream

管道输入流和管道输出流