java学习之IO字符流

来源:互联网 发布:arm linux gcc 4.9.1 编辑:程序博客网 时间:2024/05/21 17:44

编码表:由现实世界的字符和对应的数值组成的一张表。

计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。就将各个国家的文字用数字来表示,并一一对应,形成一张表。

ASCII:美国标准信息交换码。用一个字节的7位可以表示。最高位为符号位,其余为数值位。

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

GB2312:中国的中文编码表。

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

GB18030:GBK的取代版本

BIG-5码:通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”。

Unicode:国际标准码,融合了多种文字。

所有文字都用两个字节来表示,Java语言使用的就是unicode

UTF-8:最多用三个字节来表示一个字符。能用一个就用一个,一个表示不了就用两个,是在不行就用三个。

UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容:

它将Unicode编码为00000000-0000007F的字符,用单个字节来表示
它将Unicode编码为00000080-000007FF的字符用两个字节表示 
它将Unicode编码为00000800-0000FFFF的字符用3字节表示 



String(byte[] bytes,String charsetName):通过指定的字符集解码字节数组

byte[] getBytes(String charsetName):使用指定的字符集把字符串编码为字节数组


编码:把看得懂的编程看不懂的

String--------->byte[]

解码:把看不懂的变成看得懂的

byte[] -------->String

编码问题简单:只要编码解码的格式是一致的,就不会有问题。


转换流:

OutputStreamWriter:字符输出流
public OutputStreamWriter(OutputStream out):根据默认编码把字节流的数据转换为字符流
public OutputStreamWriter(OutputStream out,String charsetName):根据指定编码把字节流数据转换为字符流

把字节流转换为字符流:字符流=字节流+编码表

OutputStreamWriter写数据方法
public void write(int c):写一个字符
public void write(char[] cbuf):写一个字符数组
public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
public void write(String str):写一个字符串
public void write(String str,int off,int len):写一个字符串的一部分

字符流操作要注意的问题:
flush()的作用

flush()和close()的区别:

close():关闭流对象,但是先刷新一次缓冲区,关闭之后,流对象不可以使用继续使用了。
flush():仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。

InputStreamReader:字符输入流
public InputStreamReader(InputStream in):用默认的编码读取数据
public InputStreamReader(InputStream in,String charsetName):用指定的编码读取数据

public int read():一次读取一个字符
public int read(char[] cbuf):一次读取一个字符数组


转换流的简化写法:

转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类
FileWriter:=FileOutputStream+编码表(GBK)
FileReader:FileInputStream+编码表(GBK)



字符流为了高效读写,也提供了对应的字符缓冲流。
BufferedWriter:字符缓冲输出流
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小,在大多数情况下,默认值就足够大了。
BufferedReader:字符缓冲输入流
字符输入流中读取文本,缓冲各个字符,从而提供单个字符、数组和字符串的高效读取。可以指定缓冲区的大小,或者接受默认的大小,在大多数情况下,默认值就足够大了。


字符缓冲流的特殊方法:
BufferedWriter中:
public void newLine():根据系统来决定换行符
BufferedReader中:
public void readLine():一次读取一行数据。如果已到达末尾,返回null。




0 0