IO流总结(三)
来源:互联网 发布:软件开发营销方案 编辑:程序博客网 时间:2024/06/06 09:59
字符编码
编码:字符串变成字节数组。
解码:字节数组变成字符串。
String–>byte[]; str.getBytes(charsetName);
byte[] –>String: new String(byte[],charsetName);
为什么会出现乱码?
由于编码和解码不是一张编码表导致的
编码表的由来
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。 就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表。
常见的编码表ASCII:美国标准信息交换码,用一个字节的7位可以表示。ISO8859-1:拉丁码表。欧洲码表,用一个字节的8位表示。GB2312:中国的中文编码表。GBK:中国的中文编码表升级,融合了更多的中文文字符号。Unicode:国际标准码,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicodeUTF-8:最多用三个字节来表示一个字符。
import java.util.*;class EncodeDemo { public static void main(String[] args) throws Exception { String s = "你好";//源 byte[] b1 = s.getBytes("UTf-8");//UTF-8编码 System.out.println(Arrays.toString(b1));//UTF-8编码的数组输出,将循环输出数组封装一步到位 //String s1 = new String(b1,"UTF-8");//用UTF-8解码 String s1 = new String(b1,"ISO8859-1");//用ISO8859-1解码后乱码 System.out.println("s1="+s1); }}
出现乱码后解决思路:
一般思路,先按原来的解码表重新编码过去,在用正确的码表编码。如果编码编错了,解不出来。 如果编对了,解错了,有可能有救。
StudentInfo
练习:集合和io结合的练习题
/*有五个学生,每个学生有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); }}
0 0
- IO流总结(三)
- IO总结(三)
- 小石头课堂(三)IO流总结
- Java IO知识点总结三(字符流)
- IO流(三)
- IO流(三)
- 黑马程序员-----IO流总结笔记三
- IO/NIO学习总结(三)
- 黑马程序员------IO操作总结(三)
- java中的IO操作总结(三)
- java中的IO操作总结(三)
- java中 IO流 总结之三:字节流总结
- JAVA--IO流(三)
- IO(三)字符流
- Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
- 黑马程序员——Java基础IO流总结(三)
- 黑马程序员 知识点总结-Java IO(三)字节流
- Java基础之IO流知识点总结三
- 线上项目
- pdf什么软件打开
- PyQt4官方手册翻译-01
- Linux_2.6字符设备驱动实例
- 內表数据导出到EXCEL模板示例
- IO流总结(三)
- mysql统计当月的数据量
- Spring声明式事务配置管理方法详解
- 强烈推荐转载-Android 性能测试
- linux命令查看系统汉字编码
- JavaScript SUM and GROUP BY of JSON data
- oracle运用(一) oracle数据库使用 TIMESTAMP()类型查询数据
- FATAL: could not load /lib/modules/2.6.XXX/modules.dep No such file or directory
- 打包文件 MANIFEST.MF 功能详解