一,字符流
由于字节流 *** 作中文字符很不方便所以出现了字符流
汉字gbk编码占用两个字符,UTF-8占用3个字节,并且每个汉字的第一个字节都是负数,以方便拼接
二,编码表
计算机中储存的信息都是用二进制数表示的;我们在屏幕上看到的英文、汉字等字符是二进制敷转换之后的结果
按照某种规则,将字符存储到计算机中,称为编码。
反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码。
三,字符串的编码与解码
编码用getByte()方法
解码String s=new String()
编码与解码方式要一样否则会乱码
比如之前的代码
//用的就是String s=new String()的方法解码,在这里可以指定编码格式:new String(bye,"UTF-8")
len=fis.read(bye);
System.out.println(len);
System.out.println(new String(bye));
//用的就是getByte方法去编码,这里同样可以指定编码格式:"world".getBytes("UTF-8")
fos.write("hello".getBytes());
fos.write("world".getBytes());
四,字符流的的编码与解码
字符流的抽象基类:Reader、Writer
字符流中和编码解码问题相关的类:InputStreamReader、OutputStreamReader
InputStreamReader
它是从字节流到字符流的桥梁,读取字节并按指定的编码格式将其解码为字符
OutputStreamReader
它是从字符流到字节流的桥梁,使用指定的编码格式将写入的字符编码为字节
默认为UTF-8
下面是练习
import java.io.*;
public class Character {
public static void main(String[] args) throws IOException {
// OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("C:\data\writer.txt"),"GBK");
// osw.write("落霞与孤鹜齐飞,秋水共长天一色。");
// 读写用的编码格式不同,乱码:��ϼ�������ɣ���ˮ������һɫ��
// InputStreamReader isr=new InputStreamReader(new FileInputStream("C:\data\writer.txt"),"UTF-8");
// 读写用的编码格式相同同,正常读出:落霞与孤鹜齐飞,秋水共长天一色。
InputStreamReader isr=new InputStreamReader(new FileInputStream("C:\data\writer.txt"),"GBK");
int by;
while((by=isr.read())!=-1){
System.out.print((char)by);
}
isr.close();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)