黑马程序员-JAVA高级(IO输入与输出)PART4

来源:互联网 发布:2017淘宝店铺过户流程 编辑:程序博客网 时间:2024/04/27 19:50

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------


这部分内容的知识点为:

1.IO包中的其他几个类;

2.字符编码;

3.练习。


一、IO包中的其他几个类


1.对象的序列化:ObjectInputStream和ObjectOutputStream


2.管道流:PipedInputStream和PipedOutputStream

输入输出可以直接进行连接,通过结合线程使用。不要对这两个对象使用单线程,因为这样可能死锁线程。


3.RandomAccessFile

随机访问文件,自身具备读写的方法。

该类直接继承自Object,不算是IO体系中的子类,但因为读和写功能,它是IO包中成员。其内部封装了一个数组,通过指针对数组元素进行操作。

其实读写的原理就是内部封装了字节输入流和输出流。

通过构造函数可以看出,该类只能操作文件,包含模式:只读r,读写rw。

如果模式为只读r,只能去读取一个已经存在的文件,如果文件不存在,会出现异常而不会创建;如果模式为读写rw,如果要操作的文件不存在会自动创建,如果存在不会覆盖。


4.操作基本数据类型的流对象:DataInputStream和DataOutputStream


5.操作字节数组的流对象:ByteArrayInputStream和ByteArrayOutputStream

ByteArrayInputStream在构造的时候,需要接收数据源,而且数据源是一个字节数组。

ByteArrayOutputStream在构造的时候,不用定义数据目的,因为该对象内部已经封装了可变长度的字节数组,这就是数据目的。

因为这两个流对象操作的都是数组,没有使用系统资源,所以不用进行关闭操作。



二、编码

常见的编码表:

ASCII:美国标准信息交换码,用一个字节的7位表示;

ISO8859-1:拉丁码表(欧洲码表),用一个字节的8位表示;

GB2312:中国的中文编码表;

GBK:升级的中文编码表,融合更多中文字符;

Unicode:国际标准码表,融合多种文字。所有字符都用两个字节来表示,Java语言使用的就是Unicode。

UTF-8:最多用三个字节表示一个字符,可以是一个或两个字节。


1.转换流的字符编码


2.字符编码

编码:字符串变成字节数组

解码:字节数组变成字符串

以上代码编码解码的过程类似tomcat服务器中的编解码过程。tomcat服务器默认编码是iso8859-1,如果浏览器提交的数据是gbk编码的汉字,服务器收到后就是乱码,所以必须再次通过iso8859-1编码,然后再通过gbk解码才可以。但如果服务器端的编码默认是utf-8,就不可以这样做。


3.字符编码-联通

现象:在一个文本文件中仅仅输入“联通”两个字,保存之后再次打开的时候显示的是乱码。

解释:文本文件的默认编码是gbk,“联通”两个字通过gbk编码后是11000001 10101010 11001101 10101000,正好符合utf-8编码的形式,所以再次打开文本文件的时候会被误认为是utf-8编码而用utf-8解码,自然就显示乱码。


三、练习

需求:每个学生有三门课的成绩,从键盘按一定的格式输入学生的姓名和三门成绩(如zhangsan,38,89,98),计算出总成绩,并按总成绩的高低顺序把每个学生的信息存放在磁盘文件“stud.txt”中。

1.描述学生对象;

2.定义一个可操作学生对象的工具类。

思想:

1.获取键盘录入的一行数据,提取信息封装成学生对象;

2.因为要存储学生信息,所以使用集合,又因为要排序,所以用TreeSet对象;

3.将集合的信息写入文件中。



---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

0 0