字节流和字符流

来源:互联网 发布:12年总决赛波什数据 编辑:程序博客网 时间:2024/05/13 08:19
 

今天非常充实的一天学会了很多东西,慢慢调整过来了,不过流这里还差很多,继续努力补补,今天还讲了对象序列化,流比较好理解也就是缓冲流和转换流,今天的作业也挺有意思的,不过做的不够完善,一个学生管理系统,下边通过转换流说说我的认识,读取Reader和Writer, FileReader:专门用于处理文件的字符读取流对象, FileWriter:专门用于处理文件的字符写入流对象。

特点:

      1,是字节流和字符流之间的桥梁。

      2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。

      什么时候使用呢?

      1,当字节和字符之间有转换动作时。

      2,流操作的数据需要进行编码表的指定时。

      具体的对象体现:

      1,InputStreamReader:字节到字符的桥梁。

      2,OutputStreamWriter:字符到字节的桥梁。

      这两个流对象是字符流体系中的成员。

      那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进来。

二、感觉还是对象序列化不错 老师说很有用也一定学好,今天通过看书查资料以及课堂上的听讲我了解了不少,首先必须知道两个关键词Serializable和Externalizable

使用ObjectInputStream/ObjectOutputStream来读取或写入对象,要写入或读取的对象必须要设置在classpath中

通过java.io.ObjectOutputStream可以将对象输出到磁盘文件、网络等设备,调用这个类的writeObject()方法,可以向特定的文件或网络输出对象writeObject()方法序列化指定的对象,并遍历该对象对其它对象的引用,递归的序列化所有被引用到的其它对象,从而建立一个完整的序列化流,通过java.io.ObjectInputStream对象可以从磁盘文件中读出保存的对象(或从网络中读出传递的对象)

调用这个类的readObject()方法,从特定的设备读出对象

readObject()方法反序列化输入流中的对象,遍历该对象中所有对其它对象的引用,并递归的反序列化这些引用对象

readObject()方法返回的是Object对象,所以,需要对它进行必要的(向下)造型操作。对象序列化到磁盘或者网络,有可能造成信息泄密.为了避免泄密,可以使用两种方法:

     1.  不将重要的数据序列化

     2.  对对象的属性进行序列化的时候,对这些数据进行处理,比如加密,这个时候就需要自己定义一种方式对对象进行序列化,而不是使用默认的方式进行序列化 

通过在可系列化的类中实现方法,可以实现定制方式

private void writeObject(ObjectOutputStream out) throws IOExceptionprivate

private void readObject(ObjectInputStream in)  throws                                                                     IOException,ClassNotFoundException

对于敏感的数据,不应该直接将它序列化输出.通过在属性前面加上transient关键字,限制属性写入到文件或网络中,

今天其实还学到了很多东西,挺充实;