java序列号流基础入门

上传人:第*** 文档编号:31775654 上传时间:2018-02-09 格式:DOCX 页数:18 大小:29.17KB
返回 下载 相关 举报
java序列号流基础入门_第1页
第1页 / 共18页
java序列号流基础入门_第2页
第2页 / 共18页
java序列号流基础入门_第3页
第3页 / 共18页
java序列号流基础入门_第4页
第4页 / 共18页
java序列号流基础入门_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《java序列号流基础入门》由会员分享,可在线阅读,更多相关《java序列号流基础入门(18页珍藏版)》请在金锄头文库上搜索。

1、1 序列流SequneceInputStreamDemo.javapackage cn.itcast_06;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.SequenceInputStream;/* 以前的操作:* a.txt - b.txt* c.txt - d.txt* * 现在想要:* a.txt+b.

2、txt - c.txt*/public class SequenceInputStreamDemo public static void main(String args) throws IOException / SequenceInputStream(InputStream s1, InputStream s2)/ 需求:把 ByteArrayStreamDemo.java 和 DataStreamDemo.java 的内容复制到 Copy.java 中InputStream s1 = new FileInputStream(ByteArrayStreamDemo.java);InputS

3、tream s2 = new FileInputStream(DataStreamDemo.java);SequenceInputStream sis = new SequenceInputStream(s1, s2);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(Copy.java);/ 如何写读写呢,其实很简单,你就按照以前怎么读写,现在还是怎么读写byte bys = new byte1024;int len = 0;while (len = sis.read(bys) != -1) bo

4、s.write(bys, 0, len);bos.close();sis.close();SequneceInputStreamDemo2.javapackage cn.itcast_06;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.SequenceInputStream;import java.util.

5、Enumeration;import java.util.Vector;/* 以前的操作:* a.txt - b.txt* c.txt - d.txt* e.txt - f.txt * * 现在想要:* a.txt+b.txt+c.txt - d.txt*/public class SequenceInputStreamDemo2 public static void main(String args) throws IOException / 需求:把下面的三个文件的内容复制到 Copy.java 中/ ByteArrayStreamDemo.java,CopyFileDemo.java,D

6、ataStreamDemo.java/ SequenceInputStream(Enumeration e)/ 通过简单的回顾我们知道了 Enumeration 是 Vector 中的一个方法的返回值类型。/ Enumeration elements()Vector v = new Vector();InputStream s1 = new FileInputStream(ByteArrayStreamDemo.java);InputStream s2 = new FileInputStream(CopyFileDemo.java);InputStream s3 = new FileInput

7、Stream(DataStreamDemo.java);v.add(s1);v.add(s2);v.add(s3);Enumeration en = v.elements();SequenceInputStream sis = new SequenceInputStream(en);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(Copy.java);/ 如何写读写呢,其实很简单,你就按照以前怎么读写,现在还是怎么读写byte bys = new byte1024;int len = 0;whil

8、e (len = sis.read(bys) != -1) bos.write(bys, 0, len);bos.close();sis.close();3 序列化流ObjectSteamDemo.javapackage cn.itcast_07;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/* 序列化流:把对象按照流一样的方式

9、存入文本文件或者在网络中传输。对象 - 流数据(ObjectOutputStream)* 反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。流数据 - 对象(ObjectInputStream)*/public class ObjectStreamDemo public static void main(String args) throws IOException,ClassNotFoundException / 由于我们要对对象进行序列化,所以我们先自定义一个类/ 序列化数据其实就是把对象写到文本文件/ write();read();private static voi

10、d read() throws IOException, ClassNotFoundException / 创建反序列化对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream(oos.txt);/ 还原对象Object obj = ois.readObject();/ 释放资源ois.close();/ 输出对象System.out.println(obj);private static void write() throws IOException / 创建序列化流对象ObjectOutputStream oos

11、 = new ObjectOutputStream(new FileOutputStream(oos.txt);/ 创建对象Person p = new Person(林青霞, 27);/ public final void writeObject(Object obj)oos.writeObject(p);/ 释放资源oos.close();Person,javapackage cn.itcast_07;import java.io.Serializable;/* NotSerializableException:未序列化异常* * 类通过实现 java.io.Serializable 接口

12、以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。* 该接口居然没有任何方法,类似于这种没有方法的接口被称为标记接口。* * java.io.InvalidClassException: * cn.itcast_07.Person; local class incompatible: * stream classdesc serialVersionUID = -2071565876962058344, * local class serialVersionUID = -8345153069362641443* * 为什么会有问题呢?* Person类实现了序列化接口,那么

13、它本身也应该有一个标记值。* 这个标记值假设是100。* 开始的时候:* Person.class - id=100* wirte数据: oos.txt - id=100* read数据: oos.txt - id=100* * 现在:* Person.class - id=200* wirte数据: oos.txt - id=100* read数据: oos.txt - id=100* 我们在实际开发中,可能还需要使用以前写过的数据,不能重新写入。怎么办呢?* 回想一下原因是因为它们的id 值不匹配。* 每次修改java文件的内容的时候,class文件的id值都会发生改变。 * 而读取文件的

14、时候,会和class 文件中的id 值进行匹配。所以,就会出问题。* 但是呢,如果我有办法,让这个id 值在java文件中是一个固定的值,这样,你修改文件的时候,这个id值还会发生改变吗?* 不会。现在的关键是我如何能够知道这个id 值如何表示的呢?* 不用担心,你不用记住,也没关系,点击鼠标即可。* 你难道没有看到黄色警告线吗?* * 我们要知道的是:* 看到类实现了序列化接口的时候,要想解决黄色警告线问题,就可以自动产生一个序列化id值。* 而且产生这个值以后,我们对类进行任何改动,它读取以前的数据是没有问题的。* * 注意:* 我一个类中可能有很多的成员变量,有些我不想进行序列化。请问该

15、怎么办呢?* 使用transient关键字声明不需要序列化的成员变量*/public class Person implements Serializable private static final long serialVersionUID = -2071565876962058344L;private String name;/ private int age;private transient int age;/ int age;public Person() super();public Person(String name, int age) super();this.name =

16、 name;this.age = age;public String getName() return name;public void setName(String name) this.name = name;public int getAge() return age;public void setAge(int age) this.age = age;Overridepublic String toString() return Person name= + name + , age= + age + ;7 猜数字小游戏GuessNumber.javapackage cn.itcast_08;import java.util.Scanner;/* 这

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 工业设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号