黑马程序员-day21-IO流(字符编码)
2014-06-24 21:06
197 查看
-------
android培训、java培训、期待与您交流! ----------
字符编码
1.字符流的出现为了方便操作字符。
2.更重要是的加入了编码转换。
3.通过子类转换流来完成。
InputStreamReader
OutputStreamWriter
4.在两个对象进行构造的时候可以加入字符集
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。
为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。
常见的编码表
1.ASCII:美国标准信息交换码。
用一个字节的7位可以表示。
2.ISO8859-1:拉丁码表。欧洲码表
用一个字节的8位表示。
3.GB2312:中国的中文编码表。
4.GBK:中国的中文编码表升级,融合了更多的中文文字符号。
5.Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
6.UTF-8:最多用三个字节来表示一个字符。
转换流的字符编码
转换流的编码应用
1.可以将字符以指定编码格式存储。
2.可以对文本数据指定编码格式来解读。
3.指定编码表的动作由构造函数完成
字符编码过程
1.编码:字符串→字节数组
2.解码:字节数组→字符串
实例:
字符编码-联通
练习
android培训、java培训、期待与您交流! ----------
字符编码
1.字符流的出现为了方便操作字符。
2.更重要是的加入了编码转换。
3.通过子类转换流来完成。
InputStreamReader
OutputStreamWriter
4.在两个对象进行构造的时候可以加入字符集
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。
为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表。这就是编码表。
常见的编码表
1.ASCII:美国标准信息交换码。
用一个字节的7位可以表示。
2.ISO8859-1:拉丁码表。欧洲码表
用一个字节的8位表示。
3.GB2312:中国的中文编码表。
4.GBK:中国的中文编码表升级,融合了更多的中文文字符号。
5.Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
6.UTF-8:最多用三个字节来表示一个字符。
转换流的字符编码
import java.io.*; class EncodeStream { public static void main(String[] args) throws IOException { //writeText(); readText(); } public static void readText()throws IOException { InputStreamReader isr = new InputStreamReader(new FileInputStream("utf.txt"),"gbk"); char[] buf = new char[10]; int len = isr.read(buf); String str = new String(buf,0,len); System.out.println(str); isr.close(); } public static void writeText()throws IOException { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("utf.txt"),"UTF-8"); osw.write("你好"); osw.close(); } }
转换流的编码应用
1.可以将字符以指定编码格式存储。
2.可以对文本数据指定编码格式来解读。
3.指定编码表的动作由构造函数完成
字符编码过程
1.编码:字符串→字节数组
2.解码:字节数组→字符串
实例:
/* 编码:字符串变成字节数组。 解码:字节数组变成字符串。 String-->byte[]; str.getBytes(charsetName); byte[] -->String: new String(byte[],charsetName); */ import java.util.*; class EncodeDemo{ public static void main(String[] args)throws Exception { String s = "你好"; byte[] b1 = s.getBytes("GBK"); 4000 System.out.println(Arrays.toString(b1)); String s1 = new String(b1,"utf-8"); System.out.println("s1="+s1); //对s1进行iso8859-1编码。 byte[] b2 = s1.getBytes("utf-8"); System.out.println(Arrays.toString(b2)); String s2 = new String(b2,"gbk"); System.out.println("s2="+s2); } }
字符编码-联通
class EncodeDemo2 { public static void main(String[] args) throws Exception{ String s = "j?"; byte[] by = s.getBytes("gbk"); for(byte b : by){ System.out.println(Integer.toBinaryString(b&255)); } System.out.println("Hello World!"); } }
练习
/* 有五个学生,每个学生有3门课的成绩, 从键盘输入以上数据(包括姓名,三门课成绩), 输入的格式:如:zhagnsan,30,40,60计算出总成绩, 并把学生的信息和计算出的总分数高低顺序存放在磁盘文件"stud.txt"中。 1.描述学生对象。 2.定义一个可操作学生对象的工具类。 思路: 1.通过获取键盘录入一行数据,并将该行中的信息取出封装成学生对象。 2.因为学生有很多,那么就需要存储,使用到集合。因为要对学生的总分排序。 所以可以使用TreeSet。 3.将集合的信息写入到一个文件中。 */ import java.io.*; import java.util.*; class Student implements Comparable<Student>{ private String name; private int ma,cn,en; private int sum; Student(String name,int ma,int cn,int en){ this.name = name; this.ma = ma; this.cn = cn; this.en = en; sum = ma + cn + en; } public int compareTo(Student s){ int num = new Integer(this.sum).compareTo(new Integer(s.sum)); if(num==0) return this.name.compareTo(s.name); return num; } public String getName(){ return name; } public int getSum(){ return sum; } public int hashCode(){ return name.hashCode()+sum*78; } public boolean equals(Object obj){ if(!(obj instanceof Student)) throw new ClassCastException("类型不匹配"); Student s = (Student)obj; return this.name.equals(s.name) && this.sum==s.sum; } public String toString(){ return "student["+name+", "+ma+", "+cn+", "+en+"]"; } } class StudentInfoTool{ public static Set<Student> getStudents()throws IOException{ return getStudents(null); } public static Set<Student> getStudents(Comparator<Student> cmp)throws IOException{ BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; Set<Student> stus = null; if(cmp==null) stus = new TreeSet<Student>(); else stus = new TreeSet<Student>(cmp); while((line=bufr.readLine())!=null){ if("over".equals(line)) break; String[] info = line.split(","); Student stu = new Student(info[0],Integer.parseInt(info[1]), Integer.parseInt(info[2]), Integer.parseInt(info[3])); stus.add(stu); } bufr.close(); return stus; } public static void write2File(Set<Student> stus)throws IOException{ BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt")); for(Student stu : stus){ bufw.write(stu.toString()+"\t"); bufw.write(stu.getSum()+""); bufw.newLine(); bufw.flush(); } bufw.close(); } } class StudentInfoTest { public static void main(String[] args) throws IOException{ Comparator<Student> cmp = Collections.reverseOrder(); Set<Student> stus = StudentInfoTool.getStudents(cmp); StudentInfoTool.write2File(stus); } }
相关文章推荐
- 黑马程序员--Java基础学习(IO流及字符编码)第二十一天
- 黑马程序员——>第二十一天<io流(对象序列化-管道流-字符编码)>
- 黑马程序员————IO流4(day21)
- 黑马程序员-IO流(对象序列化、RandomAccessFile 类、字符编码)
- 黑马程序员-IO流(对象序列化、RandomAccessFile 类、字符编码、综合练习)
- 黑马程序员--IO流和字符编码
- 黑马程序员_IO流——字符编码
- 黑马程序员-----IO流(3)File类、打印流、序列化、管道流、字符编码等
- 黑马程序员——IO流及字符编码和File类对象
- 黑马程序员_Java基础_IO流(对象序列化和字符编码)
- 黑马程序员_温习 IO流五 (个人笔记)摘要(字符编码)
- 黑马程序员【深入理解IO流中字符编码问题】
- 黑马程序员_IO流(二)
- 黑马程序员——IO流
- 黑马程序员---从头开始,回忆JAVA基础之IO流(二)
- java_IO流(黑马程序员)
- 黑马程序员—IO流缓冲区知识总结
- 黑马程序员——学习日记之--IO流学习总结
- 黑马程序员——java基础——IO流
- 黑马程序员 java笔记之 IO流